当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

koa-docs-Zh-CN

授权协议 GPL-2.0 License
开发语言 JavaScript
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 不详
投 递 者 池兴邦
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

此项目同步自 koajs / koa 项目中的 docs. 除特殊情况, 将保持每月一次的同步频率.

Koa 通过 node.js 实现了一个十分具有表现力的 HTTP 中间件框架,力求让 Web 应用开发和 API 使用更加地愉快。Koa 的中间件之间按照编码顺序在栈内依次执行,允许您执行操作并向下传递请求(downstream),之后过滤并逆序返回响应(upstream)。

几乎所有 HTTP 服务器通用的方法都被直接集成到 Koa 大约570行源码的代码库中。其中包括内容协商,节点不一致性的规范化,重定向等等操作。

Koa没有捆绑任何中间件。

安装

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

$ npm install koa

Hello koa

const Koa = require('koa');
const app = new Koa();

// 响应
app.use(ctx => {
  ctx.body = 'Hello Koa';
});

app.listen(3000);

入门

中间件

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 是一个请求的上下文(context),
// 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 对象作为 Contextrequest 属性。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 对象作为 Contextresponse 属性。Koa的 Response 对象提供了用于处理 http 响应的方法,该响应委托给 ServerResponse

Koa 对 Node 的请求和响应对象进行委托而不是扩展它们。这种模式提供了更清晰的接口,并减少了不同中间件与 Node 本身之间的冲突,并为流处理提供了更好的支持。IncomingMessage 仍然可以作为 Context 上的 req 属性被直接访问,并且ServerResponse也可以作为Context 上的 res 属性被直接访问。

这里是一个使用 Koa 的 Response 对象将文件作为响应体流式传输的示例。

app.use(async (ctx, next) => {
  await next();
  ctx.response.type = 'xml';
  ctx.response.body = fs.createReadStream('really_large.xml');
});

Context 对象还提供了其 requestresponse 方法的快捷方式。在前面的例子中,可以使用 ctx.type 而不是 ctx.response.type,而 ctx.accepts 可以用来代替 ctx.request.accepts

关于 Request, ResponseContext 更多详细信息, 参阅 请求 API 参考,响应 API 参考上下文 API 参考.

Koa 应用程序

在执行 new Koa() 时创建的对象被称为 Koa 应用对象。

应用对象是带有 node http 服务的 Koa 接口,它可以处理中间件的注册,将http请求分发到中间件,进行默认错误处理,以及对上下文,请求和响应对象进行配置。

了解有关应用程序对象的更多信息请到 应用 API 参考.

文档

Babel 配置

如果你正在使用的不是 node v7.6+, 我们推荐你用 @babel/preset-env 配置 babel :

$ npm install @babel/register @babel/preset-env @babel/cli --save-dev

在开发环境中, 你可能想要使用 @babel/register:

node --require @babel/register <your-entry-file>

在生产环境中, 你可能想要使用 @babel/cli 构建文件. 假设你正在编译 src 文件夹且想要输出 non-javascript 文件拷贝到新的 dist 文件夹中:

babel src --out-dir dist --copy-files

还有你的 .babelrc 配置:

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": true
      }
    }]
  ]
}

故障排除

在 Koa 指南中查阅 故障排除指南调试 Koa.

运行测试

$ npm test

赞赏支持

赞赏支持

  • 1 安装 npm install  --save koa-static 2 引入   const static =require("koa-static"); 3 使用   app.use(static("static")) //目录 4 之后就可以在html中 获的本地静态资源了  但是需要注意的是 因为你中间件已经定义了目录  所以 <link rel="style

  • Generator和yield 分析 项目中使用了koa,最近在学习koa的源码,先把这些东西都写下来,免得以后忘记了。 koa源码学习前先注意下面这三个概念 generator function (生成器函数) generator (生成器) yield 下面是一坨很简单的代码 function *gen() { yield 'sd'; } var g = gen(); 上面的代码中

  • 一、常见模板引擎的性能对比 适用于 koa 的模板引擎选择非常多,比如 jade、ejs、nunjucks、art-template 等。 art-template 是一个简约、超快的模板引擎。它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。art-template 支持 ejs 的语法,也可以用自己的类似 a

  • 请求(Request) 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa Request 对象是在 node 的 vanilla 请求对象之上的抽象,提供了诸多对 HTTP 服务器开发有用的功能。 API request.header 请求标头对象。 request.header= 设置请求标头

  • https://github.com/koajs/koa https://github.com/demopark/koa-docs-Zh-CN ctx.response. type = 'json' ; app.use() 用来加载中间件 app. use (ctx => { ctx. body = 'Hello Koa' ; }); 以"先进后出"(first-in-last-out)的顺序执行

 相关资料
  • HomeBridge Docs(HomeBridge中文文档) 起因 在我学习使用hb的过程中,发现不明白hb的地方发现只能通过查看代码解决.我发现这很不方便也不利于国内小伙伴学习使用.所以这里做了一些相关的我学习的记录,用来说明hb设备的属性,希望对大家有用. HomeBridge 是什么? Homebridge is a lightweight NodeJS server that emula

  • Sequelize Docs 中文版 此项目同步自 sequelize / sequelize 项目中的 docs. 除特殊情况, 将保持每月一次的同步频率. 更新日志请参阅: CHANGELOG Sequelize 是一个基于 promise 的 Node.js ORM 工具, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Serv

  • Koa-Joi-Router Docs Generator This project is based on paul42/joi-router-swagger-docs. A node module for generating Swagger 2.0 JSONdefinitions from existing koa-joi-routerroutes. Aiming to be a repla

  • Boost.Hana 中文文档,翻译自 http://boostorg.github.io/hana/ 版本: Boost.Hana 1.2.0 元编程标准库中文文档 Hana 是一个元编程库,提供异构容器和算法,用于类型和值的计算。用户手册在这里 Hana 提供了异构容器和算法,合并了异构计算和编译期计算。参考文档在这里 Hana 是一个头文件库,利用C++14技术和惯用法编写,不依赖于其它库。

  • 动手学深度学习(Dive into Deep Learning,D2L.ai) 第一版:zh.D2L.ai | 第二版预览版:zh-v2.D2L.ai | 安装和使用书中源代码:第一版 第二版 | 当前版本: v2.0.0-alpha1 理解深度学习的最佳方法是学以致用。 本开源项目代表了我们的一种尝试:我们将教给读者概念、背景知识和代码;我们将在同一个地方阐述剖析问题所需的批判性思维、解决问题所

  • 功能强大的基于 HTML5 的电路模拟器,circuitjs1 的中文版本。 项目说明 本项目是国外开源项目 circuitjs1 的中文编译版本,可模拟绝大多数的电路,适合物理教学,并在原项目的基础上添加了中文语言包 locale_zh.txt。 预计后期会实现云储存、协作编辑等更高级的功能。 原项目地址(Paul):https://github.com/pfalstad/circuitjs1