【发布时间】:2018-08-20 01:37:54
【问题描述】:
我正在使用 Koa 构建一个 API。我的所有路线都使用 koa-router。每个路由都使用一个控制器,该控制器具有给定 mongoose 模型的所有逻辑。我已阅读Koa docs on error-handling 并了解awaiting 在try/catch 块中的使用。他们提到应该在中间件链的开头设置一个默认错误处理程序。因此,如果我有类似以下的内容,我应该对router.get() 的路线进行合理的错误处理:
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
err.status = err.statusCode || err.status || 500;
throw err;
}
});
router
.get('/', async (ctx, next) => {
console.log('Got Route');
//ctx.body = users;
});
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000, () => console.log('Koa app listening on 3000'));
如果我要在这条路线上稍微复杂一些,在路线内添加另一个try/catch 有什么好处吗?
router
.put('/', async function updateOnServer(ctx, next) {
try {
await Model.updateOne({
_id: ctx.params.id,
}, {
field1: ctx.request.body.field1,
$push: { field2: ctx.request.body.field2 },
}).exec();
} catch (e) {
console.log(e);
}
await next();
});
我只是在这里添加冗余错误处理吗?
【问题讨论】:
标签: javascript error-handling koa