koa学习记录

koa-generator

项目使用 koa-generator 创建,git地址

安装
npm install -g koa-generator

创建项目

$ koa /tmp/foo & cd /tmp/foo

安装依赖

$ npm install

运行

$ npm start
通用

要捕获所有的 error,可以在加载 global middlewares之前添加捕获代码。
其中 err.status,这个可以在抛出错误的时候先新建 Error 对象,然后指定一下 status 即可。

app.use(function* (next) {
    var start = new Date;
    try {
        yield next;
    } catch (err) {
        this.set('connection', 'close');
        this.status = err.status || 500;
        this.body = { 'success': false, 'message': err.message };
        //这里触发最后的app.on('error'...
        this.app.emit('error', err, this);
    }
    var ms = new Date - start;
    console.log('%s %s - %s', this.method, this.url, ms);
});

// global middlewares

因为是 webapi 项目,最后输出的 json 格式要统一,可以在加载 global middlewares 之后添加格式化代码。this.returnMessage 直接加到 this 上的。

// global middlewares
...
app.use(function* (next) {
    yield next;
    if (!this.body) {
        var err = new Error('can not find the resource');
        err.status = 404;
        throw err;
    }
    this.body = { 'success': true, 'data': this.body, 'message': this.returnMessage || '' };
});
koa-router

mu 请求要验证密码,是通过 querystring 参数 mupass 提供的,可以自己写一个验证用的 middleware。

var muAuth = function* (next) {
        if (this.query.mupass && this.query.mupass === config.muPass) {
            yield next;
        } else {
            var err = new Error('mu auth failed!');
            err.status = 401;
            throw err;
        }
    };

然后在 router 里直接使用即可

koa.use('/mu', muAuth, mu.routes(), mu.allowedMethods());

可以使用 router.param 方法过滤参数

router.param('id', function* (nodeId, next) {
    if (nodeId === '1') {
        yield next;
    } else {
        var err = new Error('server node not exist');
        err.status = 404;
        throw err;
    }
});

你可能感兴趣的:(koa学习记录)