我对 Nuxt 还很陌生,最近开始从事 Nuxt3 项目。
我希望每个服务器 api 端点都能在
try-catch
中处理其业务逻辑,并在出现错误格式时生成错误日志(我已成功引入了winston)。
server/utils
示例,它正是我所需要的,唯一的问题是我对打字稿一无所知,并且文档没有显示如何使用提供的示例。
我使用在线转换器将示例转换为纯 JS,并得到了以下结果:
export const defineWrappedResponseHandler = handler =>
defineEventHandler(async event => {
try {
// do something before the route handler
const response = await handler(event)
// do something after the route handler
return { response }
} catch (err) {
// Error handling
return { err }
}
})
但仍然:如何在我的 api 中使用此代码?
我将转换后的代码放入
server/utils/customEventHandler.js
并尝试使用
export default customEventHandler(
defineEventHandler(async (event) => {
// do buiness logic and return data
})
);
但调用端点(从浏览器)我得到 500 响应
{
"url": "/api/account/user/login",
"statusCode": 500,
"statusMessage": "",
"message": "Invalid lazy handler result. It should be a function:",
"stack": ""
}
好的,找到解决方案了。
首先,包装器代码是错误的:它应该
export default
一个函数(如错误所示):
// ~/server/utils/customEventHandler.js
export default (handler) =>
defineEventHandler(async event => {
try {
const response = await handler(event);
return { response };
}
catch(err){
throw err;
}
});
此外,我重新
throw
编辑了错误,让 Nuxt 处理响应。
然后在我的api中使用它:
// ~/server/api/my/route.js
*/
export default customEventHandler(
defineEventHandler(async (event) => {
// business logic here
return { /*something*/ };
})
);
这样我就可以“标准化”所有 api 端点的
try-catch
行为和错误处理。
任何评论或建议都非常感谢,如果有更好的解决方案我想知道。