{"id":14989349,"url":"https://github.com/demopark/koa-docs-zh-cn","last_synced_at":"2025-05-16T18:07:40.851Z","repository":{"id":46511096,"uuid":"108970846","full_name":"demopark/koa-docs-Zh-CN","owner":"demopark","description":"Koa 文档的中文版本 , 更新至 v2.13.4 版本.","archived":false,"fork":false,"pushed_at":"2022-11-15T09:56:25.000Z","size":178,"stargazers_count":960,"open_issues_count":2,"forks_count":127,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-03T17:14:09.546Z","etag":null,"topics":["koa","koa-node","nodejs"],"latest_commit_sha":null,"homepage":"https://demopark.github.io/koa-docs-Zh-CN/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/demopark.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":null,"patreon":"demopark","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://raw.githubusercontent.com/demopark/electron-api-demos-Zh_CN/master/assets/img/td.png"]}},"created_at":"2017-10-31T09:05:30.000Z","updated_at":"2025-02-05T06:55:44.000Z","dependencies_parsed_at":"2022-08-12T12:51:01.051Z","dependency_job_id":null,"html_url":"https://github.com/demopark/koa-docs-Zh-CN","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demopark%2Fkoa-docs-Zh-CN","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demopark%2Fkoa-docs-Zh-CN/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demopark%2Fkoa-docs-Zh-CN/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demopark%2Fkoa-docs-Zh-CN/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/demopark","download_url":"https://codeload.github.com/demopark/koa-docs-Zh-CN/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248599799,"owners_count":21131363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["koa","koa-node","nodejs"],"created_at":"2024-09-24T14:18:10.860Z","updated_at":"2025-04-12T16:43:45.965Z","avatar_url":"https://github.com/demopark.png","language":null,"funding_links":["https://patreon.com/demopark","https://raw.githubusercontent.com/demopark/electron-api-demos-Zh_CN/master/assets/img/td.png"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"logo.png\" alt=\"用于 nodejs 的 koa 中间件框架\"/\u003e\n\n  [![gitter][gitter-image]][gitter-url]\n  [![NPM version][npm-image]][npm-url]\n  [![build status][travis-image]][travis-url]\n  [![Test coverage][coveralls-image]][coveralls-url]\n  [![OpenCollective Backers][backers-image]](#backers)\n  [![OpenCollective Sponsors][sponsors-image]](#sponsors)\n  [![PR's Welcome][pr-welcoming-image]][pr-welcoming-url]\n  \n\u003e 此项目同步自 [koajs](https://github.com/koajs) / [koa](https://github.com/koajs/koa) 项目中的  docs. 除特殊情况, 将保持每月一次的同步频率.\n\nKoa 通过 node.js 实现了一个十分具有表现力的 HTTP 中间件框架，力求让 Web 应用开发和 API 使用更加地愉快。Koa 的中间件之间按照编码顺序在栈内依次执行，允许您执行操作并向下传递请求（downstream），之后过滤并逆序返回响应（upstream）。\n\n几乎所有 HTTP 服务器通用的方法都被直接集成到 Koa 大约570行源码的代码库中。其中包括内容协商，节点不一致性的规范化，重定向等等操作。\n\nKoa没有捆绑任何中间件。\n\n## 安装\n\nKoa 依赖 __node v7.6.0__ 或 ES2015及更高版本和 async 方法支持.\n\n```\n$ npm install koa\n```\n\n## Hello koa\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\n\n// 响应\napp.use(ctx =\u003e {\n  ctx.body = 'Hello Koa';\n});\n\napp.listen(3000);\n```\n\n## 入门\n\n - [Kick-Off-Koa](https://github.com/koajs/kick-off-koa) - 通过一系列自身指引的讲解介绍了 Koa。\n - [Workshop](https://github.com/koajs/workshop) - 通过学习 Koa 的讲解，快速领会精髓。\n - [Introduction Screencast](http://knowthen.com/episode-3-koajs-quickstart-guide/) - 关于 Koa 安装入门的介绍。\n\n\n## 中间件\n\nKoa 是一个中间件框架，可以采用两种不同的方法来实现中间件：\n\n  * async function\n  * common function\n\n以下是使用两种不同方法实现一个日志中间件的示例：\n\n### ___async___ functions (node v7.6+)\n\n```js\napp.use(async (ctx, next) =\u003e {\n  const start = Date.now();\n  await next();\n  const ms = Date.now() - start;\n  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);\n});\n```\n\n### Common function\n\n```js\n// 中间件通常带有两个参数 (ctx, next), ctx 是一个请求的上下文（context）,\n// next 是调用执行下游中间件的函数. 在代码执行完成后通过 then 方法返回一个 Promise.\n\napp.use((ctx, next) =\u003e {\n  const start = Date.now();\n  return next().then(() =\u003e {\n    const ms = Date.now() - start;\n    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);\n  });\n});\n```\n\n### Koa v1.x 中间件签名\n\n中间件签名在 v1.x 和 v2.x 之间已经被更改. 旧的签名已经被弃用.\n\n**旧的签名中间件支持将在 v3 中删除**\n\n请参阅 [迁移指南](migration.md) 获取有关从 v1.x 升级并使用 v2.x 中间件的更多信息。\n\n## 上下文, 请求和响应\n\n每个中间件都接收一个 Koa 的 `Context` 对象，该对象封装了一个传入的 http 消息，并对该消息进行了相应的响应。 `ctx` 通常用作上下文对象的参数名称。\n\n```js\napp.use(async (ctx, next) =\u003e { await next(); });\n```\n\nKoa 提供了一个 `Request` 对象作为 `Context` 的 `request` 属性。\nKoa的 `Request` 对象提供了用于处理 http 请求的方法，该请求委托给 node `http` 模块的[IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage)。\n\n这是一个检查请求客户端 xml 支持的示例。\n\n```js\napp.use(async (ctx, next) =\u003e {\n  ctx.assert(ctx.request.accepts('xml'), 406);\n  // 相当于:\n  // if (!ctx.request.accepts('xml')) ctx.throw(406);\n  await next();\n});\n```\n\nKoa提供了一个 `Response` 对象作为 `Context` 的 `response` 属性。\nKoa的 `Response` 对象提供了用于处理 http 响应的方法，该响应委托给 [ServerResponse](https://nodejs.org/api/http.html#http_class_http_serverresponse)。\n\nKoa 对 Node 的请求和响应对象进行委托而不是扩展它们。这种模式提供了更清晰的接口，并减少了不同中间件与 Node 本身之间的冲突，并为流处理提供了更好的支持。\n`IncomingMessage` 仍然可以作为 `Context` 上的 `req` 属性被直接访问，并且`ServerResponse`也可以作为`Context` 上的 `res` 属性被直接访问。\n\n这里是一个使用 Koa 的 `Response` 对象将文件作为响应体流式传输的示例。\n\n```js\napp.use(async (ctx, next) =\u003e {\n  await next();\n  ctx.response.type = 'xml';\n  ctx.response.body = fs.createReadStream('really_large.xml');\n});\n```\n\n`Context` 对象还提供了其 `request` 和 `response` 方法的快捷方式。在前面的例子中，可以使用 `ctx.type` 而不是 `ctx.response.type`，而 `ctx.accepts` 可以用来代替 `ctx.request.accepts`。\n\n关于 `Request`, `Response` 和 `Context` 更多详细信息, 参阅 [请求 API 参考](api/request.md),\n[响应 API 参考](api/response.md) 和 [上下文 API 参考](api/context.md).\n\n## Koa 应用程序\n\n在执行 `new Koa()` 时创建的对象被称为 Koa 应用对象。\n\n应用对象是带有 node http 服务的 Koa 接口，它可以处理中间件的注册，将http请求分发到中间件，进行默认错误处理，以及对上下文，请求和响应对象进行配置。\n\n了解有关应用程序对象的更多信息请到 [应用 API 参考](api/index.md).\n\n## 文档\n\n - [使用指南](guide.md)\n - [错误处理](error-handling.md)\n - [Koa 与 Express](koa-vs-express.md)\n - [常见问题](faq.md)\n - [从 Koa v1.x 迁移到 v2.x](migration.md)\n\n - [API 文档](api/index.md)\n   - [上下文(Context)](api/context.md)\n   - [请求(Request)](api/request.md)\n   - [响应(Response)](api/response.md)\n\n - [Koa 中间件列表](https://github.com/koajs/koa/wiki)\n\n## Babel 配置\n\n如果你正在使用的不是 `node v7.6+`, 我们推荐你用 [`@babel/preset-env`](https://babeljs.io/docs/en/next/babel-preset-env) 配置 `babel` :\n\n```bash\n$ npm install @babel/register @babel/preset-env @babel/cli --save-dev\n```\n\n在开发环境中, 你可能想要使用 [`@babel/register`](https://babeljs.io/docs/en/next/babel-register):\n\n```bash\nnode --require @babel/register \u003cyour-entry-file\u003e\n```\n\n在生产环境中, 你可能想要使用 [`@babel/cli`](https://babeljs.io/docs/en/babel-cli) 构建文件. 假设你正在编译 `src` 文件夹且想要输出 non-javascript 文件拷贝到新的 `dist` 文件夹中:\n\n```bash\nbabel src --out-dir dist --copy-files\n```\n\n还有你的 `.babelrc` 配置:\n\n```json\n{\n  \"presets\": [\n    [\"@babel/preset-env\", {\n      \"targets\": {\n        \"node\": true\n      }\n    }]\n  ]\n}\n```\n\n## 故障排除\n\n在 Koa 指南中查阅 [故障排除指南](troubleshooting.md) 或 [调试 Koa](guide.md#debugging-koa).\n\n## 运行测试\n\n```\n$ npm test\n```\n\n# 赞赏支持\n![赞赏支持](https://raw.githubusercontent.com/demopark/electron-api-demos-Zh_CN/master/assets/img/td.png)\n\n[npm-image]: https://img.shields.io/npm/v/koa.svg?style=flat-square\n[npm-url]: https://www.npmjs.com/package/koa\n[travis-image]: https://img.shields.io/travis/koajs/koa/master.svg?style=flat-square\n[travis-url]: https://travis-ci.org/koajs/koa\n[coveralls-image]: https://img.shields.io/codecov/c/github/koajs/koa.svg?style=flat-square\n[coveralls-url]: https://codecov.io/github/koajs/koa?branch=master\n[backers-image]: https://opencollective.com/koajs/backers/badge.svg?style=flat-square\n[sponsors-image]: https://opencollective.com/koajs/sponsors/badge.svg?style=flat-square\n[gitter-image]: https://img.shields.io/gitter/room/koajs/koa.svg?style=flat-square\n[gitter-url]: https://gitter.im/koajs/koa?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge\n[#koajs]: https://webchat.freenode.net/?channels=#koajs\n[pr-welcoming-image]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\n[pr-welcoming-url]: https://github.com/koajs/koa/pull/new","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemopark%2Fkoa-docs-zh-cn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdemopark%2Fkoa-docs-zh-cn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemopark%2Fkoa-docs-zh-cn/lists"}