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' });
});
我正在使用 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' });
});