Koa v2.x 中文文檔 Koa 對比 Express

Koa 與 Express

此係列文章的應用示例已發佈於 GitHub: koa-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.node

在理念上,Koa 旨在 「修復和替換節點」,而 Express 旨在 「增長節點」。
Koa 使用承諾和異步功能來擺脫回調地獄的應用程序,並簡化錯誤處理。
它暴露了本身的 ctx.requestctx.response 對象,而不是 node 的 reqres 對象。git

另外一方面,Express 經過附加的屬性和方法增長了 node 的 reqres 對象,而且包含許多其餘 「框架」 功能,如路由和模板,而 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不兼容。 你的應用基本上要從新改寫了。框架

Koa 替代 Express?

它更像是 Connect,可是不少 Express 的好東西被轉移到 Koa 的中間件級別,以幫助造成更強大的基礎。 這使得中間件對於整個堆棧而言不單單是最終應用程序代碼,並且更易於書寫,並更不容易出錯。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 支持, 謝謝.

相關文章
相關標籤/搜索