Koa 通过 node.js 实现了一个十分具有表现力的 HTTP 中间件框架,力求让 Web 应用开发和 API 使用更加地愉快。Koa 的中间件之间按照编码顺序在栈内依次执行,允许您执行操作并向下传递请求(downstream),之后过滤并逆序返回响应(upstream)。
几乎所有 HTTP 服务器通用的方法都被直接集成到 Koa 大约570行源码的代码库中。其中包括内容协商,节点不一致性的规范化,重定向等等操作。
Koa没有捆绑任何中间件。
Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
$ npm install koa
const Koa = require('koa');
const app = new Koa();
// 响应
app.use(ctx => {
ctx.body = 'Hello Koa';
});
app.listen(3000);
Koa 是一个中间件框架,可以采用两种不同的方法来实现中间件:
以下是使用两种不同方法实现一个日志中间件的示例:
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
// 中间件通常带有两个参数 (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`);
});
});
中间件签名在 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
上的 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
对象还提供了其 request
和 response
方法的快捷方式。在前面的例子中,可以使用 ctx.type
而不是 ctx.response.type
,而 ctx.accepts
可以用来代替 ctx.request.accepts
。
关于 Request
, Response
和 Context
更多详细信息, 参阅 请求 API 参考,响应 API 参考 和 上下文 API 参考.
在执行 new Koa()
时创建的对象被称为 Koa 应用对象。
应用对象是带有 node http 服务的 Koa 接口,它可以处理中间件的注册,将http请求分发到中间件,进行默认错误处理,以及对上下文,请求和响应对象进行配置。
了解有关应用程序对象的更多信息请到 应用 API 参考.
如果你正在使用的不是 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
}
}]
]
}
$ 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