作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如您所知,Fastify 中的默认错误界面如下所示
{
"statusCode": 400,
"error": "Bad Request",
"message": "Missing property blah-blah"
}
我真的很希望能够扔掉类似的东西
{
"statusCode": 400,
"error": "Bad Request",
"message": "Missing property blah-blah",
"myCustomError": "yo yo I am custom"
}
我尝试了使用 setErrorHandler
和 addHook("onError")
的多种(真的很多!)组合,但无法返回任何自定义错误。无论我做什么,我从处理程序内部抛出的自定义错误都会以某种方式转换为这个默认接口(interface),并且无法找到解决方法。我还尝试使用 onSend
和 onResponse
Hook 。我尝试过的一切都没有成功。 :(
是否有可能在 Fastify v3 中返回自定义错误?如果在 v3 中无法实现,那么 Fastify v4 又如何呢?有人能提供一个在 Fastify 中启用自定义错误的代码设计吗?
最佳答案
每当您返回/抛出错误
时,Fastify 都会使用不包含任何其他属性的默认序列化程序来处理它。
为此,您需要列出想要作为输出的字段:
const statusCodes = require('http').STATUS_CODES
const fastify = require('fastify')({ logger: true })
fastify.get('/', async (request, reply) => {
const err = new Error('hello')
err.statusCode = 400
err.myCustomError = 'yo yo I am custom'
throw err
})
fastify.setErrorHandler(function (error, request, reply) {
if (error.myCustomError) {
reply
.status(error.statusCode || 500)
.send({
error: statusCodes[error.statusCode || 500],
message: error.message,
myCustomError: error.myCustomError,
statusCode: error.statusCode || 500
})
} else {
reply.send(error) // fallback to the default serializer
}
})
// {"error":"Bad Request","message":"hello","myCustomError":"yo yo I am custom","statusCode":400}
fastify.inject('/').then(res => console.log(res.payload))
此代码适用于 fastify v3 和 v4
考虑阅读this article也是
关于fastify - 如何从 Fastify v3 返回自定义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74287633/
我是一名优秀的程序员,十分优秀!