如何在fastify中处理错误



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

默认情况下,当它们被抛出到setErrorHandler方法时,fastify可以处理错误。在这种情况下,setErrorHandler有error属性,error属性需要statusCode和消息属性。所以我设法扩展了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状态代码和消息

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

throw new Error('Product not found');

像这样,错误处理程序将返回500的状态代码(内部服务器错误(,并显示一条"出现问题"的消息

要了解更多关于setErrorHandler方法的信息,可以参考官方文档https://www.fastify.io/docs/latest/Reference/Server/#seterrorhandler

最新更新