摘要:的對象提供了用于處理響應的方法,該響應委托給。應用對象是與的服務器和處理中間件注冊的接口,從發送到中間件,默認錯誤處理,以及上下文,請求和響應對象的配置。
此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star.
此項目同步自 koajs / koa 項目中的 docs. 除特殊情況, 將保持每月一次的同步頻率.
用 node.js 來實現 HTTP 的中間件框架,讓 Web 應用程序和 API 可以更加愉快地編寫。Koa 的中間件堆棧以類似堆棧的方式流動,允許您執行下游操作,然后過濾并操縱上游的響應。
幾乎所有 HTTP 服務器通用的方法都被直接集成到 Koa 大約570行源碼的代碼庫中。其中包括比如內容協商,規范節點不一致性,重定向等其它操作。
Koa沒有捆綁任何中間件。
安裝Koa 依賴 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
$ npm install koaHello koa
const Koa = require("koa"); const app = new Koa(); // 響應 app.use(ctx => { ctx.body = "Hello Koa"; }); app.listen(3000);入門
Kick-Off-Koa - 通過一系列自身指引的講解介紹了 Koa。
Workshop - 通過學習 Koa 的講解,快速領會精髓。
Introduction Screencast - 關于 Koa 安裝入門的介紹。
中間件Koa 是一個中間件框架,可以將兩種不同的功能作為中間件:
async function
common function
以下是每個不同功能記錄器的中間件示例:
async functions (node v7.6+)app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); });Common function
// 中間件通常帶有兩個參數 (ctx, next), ctx 是一個請求的上下文, // next 是調用執行下游中間件的函數. 在代碼執行完成后通過 then 方法返回一個 Promise. app.use((ctx, next) => { const start = Date.now(); return next().then(() => { const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); });Koa v1.x 中間件簽名
中間件簽名在 v1.x 和 v2.x 之間已經被更改. 舊的簽名已經被棄用.
舊的簽名中間件支持將在 v3 中刪除
請參閱 遷移指南 獲取有關從 v1.x 升級并使用 v2.x 中間件的更多信息。
上下文, 請求和響應每個中間件都接收一個 Koa 的 Context 對象,該對象封裝了一個傳入的 http 消息,并對該消息進行了相應的響應。 ctx 通常用作上下文對象的參數名稱。
app.use(async (ctx, next) => { await next(); });
Koa 提供了一個 Request 對象作為 Context 的 request 屬性。
Koa的 Request 對象提供了用于處理 http 請求的方法,該請求委托給 node http 模塊的IncomingMessage。
這是一個檢查請求客戶端 xml 支持的示例。
app.use(async (ctx, next) => { ctx.assert(ctx.request.accepts("xml"), 406); // 相當于: // if (!ctx.request.accepts("xml")) ctx.throw(406); await next(); });
Koa提供了一個 Response 對象作為 Context 的 response 屬性。
Koa的 Response 對象提供了用于處理 http 響應的方法,該響應委托給 ServerResponse。
Koa 對 Node 的請求和響應對象進行委托而不是擴展它們。這種模式提供了更清晰的接口,并減少了不同中間件與 Node 本身之間的沖突,并為流處理提供了更好的支持。
IncomingMessage 仍然可以直接被訪問,因為 Context 和 ServerResponse 上的 req 屬性可以直接作為 Context 上的 res 屬性訪問。
這里是一個使用 Koa 的 Response 對象將文件作為響應體流式傳輸的示例。
app.use(async (ctx, next) => { await next(); ctx.response.type = "xml"; ctx.response.body = fs.createReadStream("really_large.xml"); });
Context 對象還提供了其 request 和 response 方法的快捷方式。在前面的例子中,可以使用 ctx.type 而不是 ctx.request.type,而 ctx.accepts 可以用來代替 ctx.request.accepts。
關于 Request, Response 和 Context 更多詳細信息, 參閱 請求 API 參考,
響應 API 參考 和 上下文 API 參考.
在執行 new Koa() 時創建的對象被稱為 Koa 應用程序對象。
應用對象是 Koa 與 node 的 http 服務器和處理中間件注冊的接口,從 http 發送到中間件,默認錯誤處理,以及上下文,請求和響應對象的配置。
了解有關應用程序對象的更多信息請到 應用 API 參考.
文檔使用指南
錯誤處理
Koa 與 Express
常見問題
從 Koa v1.x 遷移到 v2.x
API 文檔
上下文(Context)
請求(Request)
響應(Response)
Koa 中間件列表
Babel 配置如果你正在使用的不是 node v7.6+, 我們推薦你用 babel-preset-env 配置 babel :
$ npm install babel-register babel-preset-env --save
在你入口文件配置 babel-register:
require("babel-register");
還有你的 .babelrc 配置:
{ "presets": [ ["env", { "targets": { "node": true } }] ] }運行測試
$ npm test
如果這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: koa-docs-Zh-CN 支持, 謝謝.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89494.html
摘要:一個遷移方式是逐個更新它們。刪除特定的日志記錄行為對于環境的顯式檢查從錯誤處理中刪除。直接或它不再使用并已廢棄。支持仍然支持分支,但應該不會得到功能性更新。除了此遷移指南外,文檔將針對最新版本。 從 Koa v1.x 遷移到 v2.x 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. 新的中...
摘要:使用承諾和異步功能來擺脫回調地獄的應用程序,并簡化錯誤處理。它暴露了自己的和對象,而不是的和對象。因此,可被視為的模塊的抽象,其中是的應用程序框架。這使得中間件對于整個堆棧而言不僅僅是最終應用程序代碼,而且更易于書寫,并更不容易出錯。 Koa 與 Express 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新...
摘要:常見問題此系列文章的應用示例已發布于可以幫助改進或關注更新歡迎替代它更像是,但是很多的好東西被轉移到的中間件級別,以幫助形成更強大的基礎。這使得中間件對于整個堆棧而言不僅僅是最終應用程序代碼,而且更易于書寫,并更不容易出錯。 常見問題 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. Koa...
摘要:當中間件運行時,它必須手動調用來運行下游中間件。例如,這個中間件從讀取文件名,然后在將給指定合并結果之前并行讀取每個文件的內容。當你無法控制中間件的名稱時,這很有用。 指南 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. 本指南涵蓋的 Koa 主題不與 API 直接相關,例如編寫中間件的最...
摘要:但是,默認錯誤處理程序對于大多數用例來說都是足夠好的。錯誤偵聽器接收所有中間件鏈返回的錯誤,如果一個錯誤被捕獲并且不再拋出,它將不會被傳遞給錯誤偵聽器。 錯誤處理 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. Try-Catch 使用 async 方法意味著你可以 try-catch n...
閱讀 2664·2021-11-24 09:38
閱讀 1979·2019-08-30 15:53
閱讀 1234·2019-08-30 15:44
閱讀 3229·2019-08-30 14:10
閱讀 3578·2019-08-29 16:29
閱讀 1799·2019-08-29 16:23
閱讀 1099·2019-08-29 16:20
閱讀 1471·2019-08-29 11:13