Koa 错误处理:`return` 是必要的吗?
Koa Error Handling: is `return` necessary?
我正在使用 koa-routers 来处理向第三方发送电子邮件请求的路由 api。我的错误处理正确吗?我需要 return 什么吗?我应该 return ctx.response
吗?我看到一些例子以 await next() 结束函数。但是,我假设我不需要这个,因为下游没有其他 func/middleware。
router.post('sendemail', async (ctx) => {
const emailData = ctx.request.body;
try {
await someEmailApi({
recipient: {
name: emailData.recipientName,
address: emailData.recipientEmail,
},
sender: {
name: emailData.senderName,
address: emailData.senderEmail,
},
subject: mail.subject,
message: mail.message,
});
ctx.response.status = 200;
ctx.response.body = 'OK';
} catch (err) {
ctx.response.status = err.status;
ctx.response.body = err.message';
ctx.throw(ctx.response.status, ctx.response.body);
}
});
所以因为这是一个路由处理程序,你通常不会调用 await next()
因为路由处理程序无论如何都是 "inner-most" 中间件,所以 next()
是一个空操作。
如果您正在使用 ctx.throw
,则无需单独设置状态和正文。
这应该足够了:
ctx.throw(err.status, err.message)
我正在使用 koa-routers 来处理向第三方发送电子邮件请求的路由 api。我的错误处理正确吗?我需要 return 什么吗?我应该 return ctx.response
吗?我看到一些例子以 await next() 结束函数。但是,我假设我不需要这个,因为下游没有其他 func/middleware。
router.post('sendemail', async (ctx) => {
const emailData = ctx.request.body;
try {
await someEmailApi({
recipient: {
name: emailData.recipientName,
address: emailData.recipientEmail,
},
sender: {
name: emailData.senderName,
address: emailData.senderEmail,
},
subject: mail.subject,
message: mail.message,
});
ctx.response.status = 200;
ctx.response.body = 'OK';
} catch (err) {
ctx.response.status = err.status;
ctx.response.body = err.message';
ctx.throw(ctx.response.status, ctx.response.body);
}
});
所以因为这是一个路由处理程序,你通常不会调用 await next()
因为路由处理程序无论如何都是 "inner-most" 中间件,所以 next()
是一个空操作。
如果您正在使用 ctx.throw
,则无需单独设置状态和正文。
这应该足够了:
ctx.throw(err.status, err.message)