Koa 1 - 说明(Readme)
Expressive HTTP middleware framework for node.js to make web applications and APIs more enjoyable to write. Koa’s middleware stack flows in a stack-like manner, allowing you to perform actions downstream then filter and manipulate the response upstream.
Node.js中丰富的HTTP中间件框架让Web应用和API的开发和编码充满乐趣。Koa的中间件逐层响应输入的数据,之后再逐层过滤和处理输出的数据,中间件组织成层层包裹的结构。
Only methods that are common to nearly all HTTP servers are integrated directly into Koa’s small ~570 SLOC codebase. This includes things like content negotiation, normalization of node inconsistencies, redirection, and a few others.
Koa的核心代码库不超过570行,仅实现了常见HTTP服务器的基础方法。主要包含内容协商,节点差异处理和重定向等等。
Koa is not bundled with any middleware.
Koa没有内置任何中间件。
安装(Installation)
Koa requires node v4.0.0 or higher for (partial) ES2015 support.
Koa要求node v4.0.0或以上版本,以满足对ES2015规范的部分要求。
$ npm install koa@next
Hello koa
const Koa = require('koa');
const app = new Koa();
// response
app.use(ctx => {
ctx.body = 'Hello Koa';
});
app.listen(3000);
入门(Getting started)
- Kick-Off-Koa - An intro to koa via a set of self-guided workshops.
- Workshop - A workshop to learn the basics of koa, Express’ spiritual successor.
-
Introduction Screencast - An introduction to installing and getting started with Koa
- Kick-Off-Koa - Koa自学系列。
- Workshop - Koa基础学习系列,快速上手。
- Introduction Screencast - Koa安装和入门。
中间件(Middleware)
Koa is a middleware framework that can take 3 different kinds of functions as middleware:
- common function
- async function
- generatorFunction
Koa是一个中间件框架,可以使用如下3中方式的函数作为中间件:
- 普通函数
- 异步函数
- 生成器函数
Here is an example of logger middleware with each of the different functions:
下面这个例子是一个日志记录中间件的不同实现方式:
(普通函数)Common function
// Middleware normally takes two parameters (ctx, next), ctx is the context for one request,
// next is a function that is invoked to execute the downstream middleware. It returns a Promise with a then function for running code after completion.
app.use((ctx, next) => {
const start = new Date();
return next().then(() => {
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
});
异步函数(async functions (Babel required))
(编者按:在Node.js 7.0中启用–harmony-async-await标记即可可代替Babel)。
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
生成器函数(GeneratorFunction)
To use generator functions, you must use a wrapper such as co that is no longer supplied with Koa.
需要注意的是:使用生成器函数,必须用co之类的库对其进行封装,Koa不在提供此类对象。
app.use(co.wrap(function *(ctx, next) {
const start = new Date();
yield next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
}));
Old signature middleware (v1.x) - Deprecated
Old signature middleware (v1.x) support will be removed in v3
Koa v2.x will try to convert legacy signature, generator middleware on app.use
, using koa-convert.
It is however recommended that you choose to migrate all v1.x middleware as soon as possible.
// Koa will convert
app.use(function *(next) {
const start = new Date();
yield next;
const ms = new Date() - start;
console.log(`${this.method} ${this.url} - ${ms}ms`);
});
You could do it manually as well, in which case Koa will not convert.
const convert = require('koa-convert');
app.use(convert(function *(next) {
const start = new Date();
yield next;
const ms = new Date() - start;
console.log(`${this.method} ${this.url} - ${ms}ms`);
}));
Babel设置(Babel setup)
For Node 4.0 and Babel 6.0 you can setup like this:
基于Node 4.0和Babel 6.0可以进行如下设置:
$ npm install babel-register babel-plugin-transform-async-to-generator --save
// set babel in entry file
require('babel-register')({
plugins: ['transform-async-to-generator']
});
Check out an example in koa’s test.
可以签出这个Koa的测试代码测试一下。
运行测试(Running tests)
$ make test
作者(Authors)
See AUTHORS.
社区贡献(Community)
- API documentation
- Badgeboard and list of official modules
- Examples
- Middleware list
- Wiki
- G+ Community
- Reddit Community
- Mailing list
- Guide
- FAQ
- 中文文档
- #koajs on freenode
许可(License)
MIT