0
我正在试验koa和knex来构建一个RESTful的Web服务,虽然我有基本的工作,我坚持在处理错误。我也使用koa-knex-middleware将knex包装在一个生成器中。koa错误处理和状态代码与koa
我有下面的代码,它定义了特定资源GET和POST请求会发生什么:
var koa = require('koa');
var koaBody = require('koa-body')();
var router = require('koa-router')();
var app = koa();
var knex = require('./koa-knex');
app.use(knex({
client: 'sqlite3',
connection: {
filename: "./src/server/devdb.sqlite"
}
}));
router
.get('/equipment', function *(next){
this.body = yield this.knex('equipment');
})
.post('/equipment', koaBody, function *(next){
this.body = yield this.knex('equipment').insert(this.request.body)
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(4000);
这工作一般,但我不能设法做的是改变HTTP状态码。例如,我想为POST请求返回201,以便为不符合数据库模式的畸形请求添加项目以及400。
我试着用knex的tap()
和catch()
,但我无法修改状态码。
this.body = yield this.knex('equipment').insert(this.request.body).tap(function(){this.response = 204}.bind(this))
只是永远挂起。如果我尝试使用.catch
来设置一个400,那也是一样的。
读到Koa起初我以为我大致了解它应该如何工作,但现在我不再那么肯定了。特别是koa与发电机的互动和knex的承诺让我非常困惑。
是我的一般方法,还是混合knex和koa这种方式是一个坏主意?我该如何处理这种组合的错误和状态码?