【问题标题】:How to work with error handling in fastify如何在 fastify 中进行错误处理
【发布时间】:2021-12-26 06:11:16
【问题描述】:

我正在使用 fastify 为一个工作项目创建一个 rest api,我已经深入到项目中,我开始弄清楚我的项目中的错误处理。但是,我似乎无法理解如何在 fastify 中正确实现错误处理。例如,如何更改默认错误消息的结构?我已经看到了一些使用自定义响应架构布局的示例,但它是用于更改响应的结构还是纯粹用于响应验证?此外,我还看到了在定义自定义错误时抛出错误对象的示例,但我也看到了在抛出错误时使用请求对象之外的函数的示例。两种抛出自定义错误的方法有什么区别?任何有关如何处理此问题的建议表示赞赏。

【问题讨论】:

标签: node.js http error-handling fastify


【解决方案1】:

默认情况下,当错误被抛出到 setErrorHandler 方法时,fastify 可以处理错误。在这些情况下,setErrorHandler 具有 error 属性,并且 error 属性需要 statusCode、message 属性。所以我设法扩展了 Error 属性来使用它。可以看下面的代码让你一目了然

    class ApiError extends Error {
  constructor(statusCode, message) {
    super(message);
    this.statusCode = statusCode;

    Error.captureStackTrace(this, this.constructor);
  }
}

我们可以像 in 一样使用 ApiError

const product = await Product.findOne({ _id: productId });
  if (!product) {
    throw new ApiError(httpStatus.NOT_FOUND, 'Product not found');
  }

因此,当抛出 unHandled Promise 错误时,setErrorHandler 方法将发送我们在 ApiError 中定义的自定义 http-status 代码和消息

如果你抛出带有消息的默认错误

throw new Error('Product not found');

像这些错误处理程序将返回 500 的状态代码(内部服务器错误)并带有“出现问题”的消息

更多关于 setErrorHandler 方法可以参考官方文档https://www.fastify.io/docs/latest/Reference/Server/#seterrorhandler

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多