国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Koa v2.x 中文文檔 API

mikasa / 2893人閱讀

</>復制代碼

  1. 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star.

相關 API

上下文(Context)

請求(Request)

響應(Response)

安裝

Koa 依賴 node v7.6.0 或 ES2015及更高版本和 async 方法支持.

你可以使用自己喜歡的版本管理器快速安裝支持的 node 版本:

</>復制代碼

  1. $ nvm install 7
  2. $ npm i koa
  3. $ node my-koa-app.js
使用 Babel 實現 Async 方法

要在 node < 7.6 版本的 Koa 中使用 async 方法, 我們推薦使用 babel"s require hook.

</>復制代碼

  1. require("babel-register");
  2. // 應用的其余 require 需要被放到 hook 后面
  3. const app = require("./app");

要解析和編譯 async 方法, 你至少應該有 transform-async-to-generator
或 transform-async-to-module-method 插件.

例如, 在你的 .babelrc 文件中, 你應該有:

</>復制代碼

  1. {
  2. "plugins": ["transform-async-to-generator"]
  3. }

你也可以用 env preset 的 target 參數 "node": "current" 替代.

應用程序

Koa 應用程序是一個包含一組中間件函數的對象,它是按照類似堆棧的方式組織和執行的。
Koa 類似于你可能遇到過的許多其他中間件系統,例如 Ruby 的 Rack ,Connect 等,然而,一個關鍵的設計點是在其低級中間件層中提供高級“語法糖”。 這提高了互操作性,穩健性,并使書寫中間件更加愉快。

這包括諸如內容協商,緩存清理,代理支持和重定向等常見任務的方法。 盡管提供了相當多的有用的方法 Koa 仍保持了一個很小的體積,因為沒有捆綁中間件。

必修的 hello world 應用:

</>復制代碼

  1. const Koa = require("koa");
  2. const app = new Koa();
  3. app.use(async ctx => {
  4. ctx.body = "Hello World";
  5. });
  6. app.listen(3000);
級聯

Koa 中間件以更傳統的方式級聯,您可能習慣使用類似的工具 - 之前難以讓用戶友好地使用 node 的回調。然而,使用 async 功能,我們可以實現 “真實” 的中間件。對比 Connect 的實現,通過一系列功能直接傳遞控制,直到一個返回,Koa 調用“下游”,然后控制流回“上游”。

下面以 “Hello World” 的響應作為示例,首先請求流通過 x-response-timelogging 中間件來請求何時開始,然后繼續移交控制給 response 中間件。當一個中間件調用 next() 則該函數暫停并將控制傳遞給定義的下一個中間件。當在下游沒有更多的中間件執行后,堆棧將展開并且每個中間件恢復執行其上游行為。

</>復制代碼

  1. const Koa = require("koa");
  2. const app = new Koa();
  3. // x-response-time
  4. app.use(async (ctx, next) => {
  5. const start = Date.now();
  6. await next();
  7. const ms = Date.now() - start;
  8. ctx.set("X-Response-Time", `${ms}ms`);
  9. });
  10. // logger
  11. app.use(async (ctx, next) => {
  12. const start = Date.now();
  13. await next();
  14. const ms = Date.now() - start;
  15. console.log(`${ctx.method} ${ctx.url} - ${ms}`);
  16. });
  17. // response
  18. app.use(async ctx => {
  19. ctx.body = "Hello World";
  20. });
  21. app.listen(3000);
設置

應用程序設置是 app 實例上的屬性,目前支持如下:

app.env 默認是 NODE_ENV 或 "development"

app.proxy 當真正的代理頭字段將被信任時

app.subdomainOffset 對于要忽略的 .subdomains 偏移[2]

app.listen(...)

Koa 應用程序不是 HTTP 服務器的1對1展現。
可以將一個或多個 Koa 應用程序安裝在一起以形成具有單個HTTP服務器的更大應用程序。

創建并返回 HTTP 服務器,將給定的參數傳遞給 Server#listen()。這些內容都記錄在 nodejs.org.

以下是一個無作用的 Koa 應用程序被綁定到 3000 端口:

</>復制代碼

  1. const Koa = require("koa");
  2. const app = new Koa();
  3. app.listen(3000);

這里的 app.listen(...) 方法只是以下方法的語法糖:

</>復制代碼

  1. const http = require("http");
  2. const Koa = require("koa");
  3. const app = new Koa();
  4. http.createServer(app.callback()).listen(3000);

這意味著您可以將同一個應用程序同時作為 HTTP 和 HTTPS 或多個地址:

</>復制代碼

  1. const http = require("http");
  2. const https = require("https");
  3. const Koa = require("koa");
  4. const app = new Koa();
  5. http.createServer(app.callback()).listen(3000);
  6. https.createServer(app.callback()).listen(3001);
app.callback()

返回適用于 http.createServer() 方法的回調函數來處理請求。你也可以使用此回調函數將 koa 應用程序掛載到 Connect/Express 應用程序中。

app.use(function)

將給定的中間件方法添加到此應用程序。參閱 Middleware 獲取更多信息.

app.keys=

設置簽名的 Cookie 密鑰。

這些被傳遞給 KeyGrip,但是你也可以傳遞你自己的 KeyGrip 實例。

例如,以下是可以接受的:

</>復制代碼

  1. app.keys = ["im a newer secret", "i like turtle"];
  2. app.keys = new KeyGrip(["im a newer secret", "i like turtle"], "sha256");

這些密鑰可以倒換,并在使用 { signed: true } 參數簽名 Cookie 時使用。

</>復制代碼

  1. ctx.cookies.set("name", "tobi", { signed: true });
app.context

app.context 是從其創建 ctx 的原型。您可以通過編輯 app.contextctx 添加其他屬性。這對于將 ctx 添加到整個應用程序中使用的屬性或方法非常有用,這可能會更加有效(不需要中間件)和/或 更簡單(更少的 require()),而更多地依賴于ctx,這可以被認為是一種反模式。

例如,要從 ctx 添加對數據庫的引用:

</>復制代碼

  1. app.context.db = db();
  2. app.use(async ctx => {
  3. console.log(ctx.db);
  4. });

注意:

ctx 上的許多屬性都是使用 gettersetterObject.defineProperty() 定義的。你只能通過在 app.context 上使用 Object.defineProperty() 來編輯這些屬性(不推薦)。查閱 https://github.com/koajs/koa/...

安裝的應用程序目前使用其父級的 ctx 和設置。 因此,安裝的應用程序只是一組中間件。

錯誤處理

默認情況下,將所有錯誤輸出到 stderr,除非 app.silenttrue
err.status404err.exposetrue 時默認錯誤處理程序也不會輸出錯誤。
要執行自定義錯誤處理邏輯,如集中式日志記錄,您可以添加一個 “error” 事件偵聽器:

</>復制代碼

  1. app.on("error", err => {
  2. log.error("server error", err)
  3. });

如果 req/res 期間出現錯誤,并且 無法 響應客戶端,Context實例仍然被傳遞:

</>復制代碼

  1. app.on("error", (err, ctx) => {
  2. log.error("server error", err, ctx)
  3. });

當發生錯誤 并且 仍然可以響應客戶端時,也沒有數據被寫入 socket 中,Koa 將用一個 500 “內部服務器錯誤” 進行適當的響應。在任一情況下,為了記錄目的,都會發出應用級 “錯誤”。

</>復制代碼

  1. 如果這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: koa-docs-Zh-CN 支持, 謝謝.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89472.html

相關文章

  • Koa v2.x 中文文檔

    摘要:的對象提供了用于處理響應的方法,該響應委托給。應用對象是與的服務器和處理中間件注冊的接口,從發送到中間件,默認錯誤處理,以及上下文,請求和響應對象的配置。 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. showImg(https://segmentfault.com/img/bVNQYf...

    Cobub 評論0 收藏0
  • Koa v2.x 中文文檔 上下文(Context)

    摘要:方法拋出一個屬性默認為的錯誤,這將允許做出適當地響應。這用于修飾其人機友好型錯誤并向上游的請求者報告非常有用。請注意,不支持使用此功能。這可能會破壞中間件和本身的預期功能。 上下文(Context) 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. Koa Context 將 node 的 ...

    Arno 評論0 收藏0
  • Koa v2.x 中文文檔 使用指南

    摘要:當中間件運行時,它必須手動調用來運行下游中間件。例如,這個中間件從讀取文件名,然后在將給指定合并結果之前并行讀取每個文件的內容。當你無法控制中間件的名稱時,這很有用。 指南 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. 本指南涵蓋的 Koa 主題不與 API 直接相關,例如編寫中間件的最...

    anquan 評論0 收藏0
  • Koa v2.x 中文文檔Koa v1.x 遷移到 v2.x

    摘要:一個遷移方式是逐個更新它們。刪除特定的日志記錄行為對于環境的顯式檢查從錯誤處理中刪除。直接或它不再使用并已廢棄。支持仍然支持分支,但應該不會得到功能性更新。除了此遷移指南外,文檔將針對最新版本。 從 Koa v1.x 遷移到 v2.x 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. 新的中...

    fancyLuo 評論0 收藏0
  • Koa v2.x 中文文檔 請求(Request)

    摘要:別名為設置請求標頭對象。獲取請求路徑名。設置請求路徑名,并在存在時保留查詢字符串。請注意,此不支持嵌套對象。檢查請求緩存是否新鮮,也就是內容沒有改變。通過來檢查請求是否通過發出。返回請求套接字。 請求(Request) 此系列文章的應用示例已發布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. Koa Request...

    asoren 評論0 收藏0

發表評論

0條評論

mikasa

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<