首页 > 解决方案 > 如何在 fastify 中进行错误处理

问题描述

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

标签: node.jshttperror-handlingfastify

解决方案


默认情况下,当错误被抛出到 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);
  }
}

我们可以像中一样使用 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


推荐阅读