gpt4 book ai didi

fastify - 如何从 Fastify v3 返回自定义错误?

转载 作者:行者123 更新时间:2023-12-03 08:00:45 26 4
gpt4 key购买 nike

如您所知,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"
}

我尝试了使用 setErrorHandleraddHook("onError") 的多种(真的很多!)组合,但无法返回任何自定义错误。无论我做什么,我从处理程序内部抛出的自定义错误都会以某种方式转换为这个默认接口(interface),并且无法找到解决方法。我还尝试使用 onSendonResponse 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com