ok 和 not ok 的最佳实践 koa 路由响应

best practise koa routing responses for ok and not ok

我正在使用 koa-router 定义 REST api。

我有一个允许客户端修补数据的路由,为此我希望只响应 :-

确定 - 数据修补无误

不正常 - 发生错误。

router.patch('/api/data', function *(next) {
    if (_.has(this.query, 'id')) {
        // do data patch
        this.status = 200;
        this.body = yield {status: 200, body: 'OK'};
    } else {
        this.status = 304;
        this.body = yield {status: 304, body: 'expecting id};
    }
});

有没有比上面更标准的方式?

不要生成简单的对象。只有当一个或多个属性通过一个可屈服对象(promise、thunk、generator...)被赋值时才会产生一个对象。

考虑退回更新后的商品,以免需要额外 api 次调用。

this.throw()是我用的

router.patch('/api/data', function *(next) {
  if (_.has(this.query, 'id')) {
    this.status = 200;
    // don't yield...
    this.body = {status: 200, body: 'OK'};

    // consider returning the updated item to prevent the need to additional 
    // api calls
    this.body = yield model.update(this.query.id, ...)
  } else {
    this.throw(304, 'expecting id', {custom: 'properties here'});
  }
});

为了略微改进@James Moore 的回答,如果 expression 不真实,您还可以使用 this.assert(expression, [status], [message]) 提前短路路由。

我已经转换了他们的代码来演示:

router.patch('/api/data', function*(next) {
  this.assert(_.has(this.query, 'id'), 304, JSON.stringify({ status: 304, body: 'expecting id' })));
  this.body = JSON.stringify({ status: 200, body: 'OK' });
});