Koa2基本用法

2017-02-11  本文已影响0人  happystory

安装

因为需要部分ES2015的特性的支持,Koa需要node v4.0.0或更高版本。

cnpm i koa@next

中间件

Koa是一个中间件框架,可以接受三种不同类弄的函数作为中间件:

下面是一个使用不同类型函数作为日志记录中间件的例子:

普通函数

正常情况下中间件接受两个参数(ctx, next),ctx是请求的上下文,next是能引发下游中间件函数的执行,它会返回一个Promise对象。

'use strict';

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

app.use((ctx, next) => {
    const start = new Date();
    return next().then(() => {
        const ms = new Date() - start;
        console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
    });
});

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

app.listen(3000);
console.log('app started at port 3000');

async函数(需要Babel)

对于Node 4.0和Babel 6.0,可以通过以下方式编绎。

cnpm i babel-register babel-plugin-transform-async-to-generator --save
// start.js
'use strict';

// http://babeljs.io/docs/setup/#babel_register

require('babel-register')({
    plugins: ['transform-async-to-generator']
});
require('./app.js');
// app.js
'use strict';

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

app.use(async (ctx, next) => {
    const start = new Date();
    await next();
    const ms = new Date() - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});

app.use(async (ctx) => {
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
});

app.listen(3000);
console.log('app started at port 3000');

Generator函数

为了使用generator函数,需要使用co这样的wrapper。

cnpm i co --save
'use strict';

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

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`);
}));

app.use(co.wrap(function *(ctx) {
    ctx.body = 'Hello Koa';
}));

app.listen(3000);
console.log('app started at port 3000');
上一篇下一篇

猜你喜欢

热点阅读