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