Nux3 - 服务器实用程序 - 自定义事件处理程序包装器

问题描述 投票:0回答:1

我对 Nuxt 还很陌生,最近开始从事 Nuxt3 项目。

我希望每个服务器 api 端点都能在

try-catch
中处理其业务逻辑,并在出现错误格式时生成错误日志(我已成功引入了winston)。

鉴于这个需求,我偶然发现了 Nuxt3 自己的

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": ""
}
server nuxt.js nuxtjs3
1个回答
0
投票

好的,找到解决方案了。

首先,包装器代码是错误的:它应该

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
行为和错误处理。

任何评论或建议都非常感谢,如果有更好的解决方案我想知道。

© www.soinside.com 2019 - 2024. All rights reserved.