Koa 與 Express
此係列文章的應用示例已釋出於 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star.
在理念上,Koa 旨在 “修復和替換節點”,而 Express 旨在 “增加節點”。
Koa 使用承諾和非同步功能來擺脫回撥地獄的應用程式,並簡化錯誤處理。
它暴露了自己的 ctx.request
和 ctx.response
物件,而不是 node 的 req
和 res
物件。
另一方面,Express 通過附加的屬性和方法增加了 node 的 req
和 res
物件,並且包含許多其他 “框架” 功能,如路由和模板,而 Koa 則沒有。
因此,Koa 可被視為 node.js 的 http
模組的抽象,其中 Express 是 node.js 的應用程式框架。
功能 | Koa | Express | Connect |
---|---|---|---|
Middleware Kernel | ✓ | ✓ | ✓ |
Routing | – | ✓ | – |
Templating | – | ✓ | – |
Sending Files | – | ✓ | – |
JSONP | – | ✓ | – |
因此,如果您想要更接近 node.js 和傳統的 node.js 樣式編碼,那麼您可能希望堅持使用Connect/Express 或類似的框架。
如果你想擺脫回撥,請使用 Koa。
由於這種不同的理念,其結果是傳統的 node.js “中介軟體”(即“(req,res,next)”的函式)與Koa不相容。 你的應用基本上要重新改寫了。
Koa 替代 Express?
它更像是 Connect,但是很多 Express 的好東西被轉移到 Koa 的中介軟體級別,以幫助形成更強大的基礎。 這使得中介軟體對於整個堆疊而言不僅僅是最終應用程式程式碼,而且更易於書寫,並更不容易出錯。
通常,許多中介軟體將重新實現類似的功能,甚至更糟的是不正確地實現它們, 如簽名的cookie 加密等通常是應用程式特定的,而不是中介軟體特定的。
Koa 替代 Connect?
不,只是不同的功能,現在通過構建器也可以讓我們用較少的回撥編寫程式碼。 Connect 同樣可以,有些人可能仍然喜歡它,這取決於你喜歡什麼。
為什麼 Koa 不是 Express 4.0?
Koa 與現在所知的 Express 差距很大,設計根本上有很大差異,所以從 Express 3.0 遷移到Express 4.0 將有意味著重寫整個應用程式,所以我們考慮建立一個新的庫。
Koa 與 Connect/Express 有哪些不同?
基於 Promises 的控制流程
沒有回撥地獄。
通過 try/catch 更好的處理錯誤。
無需域。
Koa 非常精簡
不同於 Connect 和 Express, Koa 不含任何中介軟體.
不同於 Express, 不提供路由.
不同於 Express, 不提供許多便捷設施。 例如,傳送檔案.
Koa 更加模組化.
Koa 對中介軟體的依賴較少
例如, 不使用 “body parsing” 中介軟體,而是使用 body 解析函式。
Koa 抽象 node 的 request/response
減少攻擊。
更好的使用者體驗。
恰當的流處理。
Koa 路由(第三方庫支援)
由於 Express 帶有自己的路由,而 Koa 沒有任何內建路由,但是有 koa-router 和 koa-route 第三方庫可用。同樣的, 就像我們在 Express 中有 helmet 保證安全, 對於 koa 我們有 koa-helmet 和一些列的第三方庫可用。
如果這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: koa-docs-Zh-CN 支援, 謝謝.