@hapi/boom 没有返回正确的错误,而是“500:内部服务器错误”
@hapi/boom not returning correct error, instead "500 : Internal Server Error"
@hapi/boom 不是 return 纠正代码中抛出的错误。
这是代码示例:
controller.ts
async (request: IRequest, h: IResponse) => {
.... // some logic
const userInfo = await verify(email, authToken)
if (!userInfo) throw Boom.unauthorized(`Unable to fetch user information`)
.... some logic
return h.response({ statusCode: 200, message: "Success", data })
} catch (error) {
throw error
}
verify.ts
export async function verify(userEmail: string, token: string) {
try {
const ticket = await client.verifyIdToken({
idToken: token,
audience: clientId
})
const payload = ticket.getPayload()
if (!payload) throw Boom.unauthorized("Google authentication failed")
const { sub: userId, name, email, aud, picture: profilePhoto } = payload
if (!aud || aud !== clientId) throw Boom.unauthorized(`Invalid token for ${config.get("appName")}`)
if (!email || email !== userEmail) throw Boom.unauthorized(`Invalid token for email ${userEmail}`)
return { userId, name, profilePhoto, email }
} catch (error) {
logger.error(error)
throw error
}
}
现在,如果出错,它应该是 return 未授权 ,但它是 returning Internal Server Error总是。
对 return 实际信息错误的任何解决方案?
堆栈:
@hapi/hapi : 20.0.3
@hapi/boom : 9.1.1
我想它不会再帮助你了,因为这个问题已经有 9 个月了,但在你发布的代码中,clientId
是 undefined
在 try
块中。这意味着您最终进入 catch
块并且(重新)throw
原始错误。
由于您在 catch
块中使用常规 throw
,hapi 调用 throw Boom.internal()
,这是一个 HTTP 500 内部服务器错误。
@hapi/boom 不是 return 纠正代码中抛出的错误。 这是代码示例:
controller.ts
async (request: IRequest, h: IResponse) => {
.... // some logic
const userInfo = await verify(email, authToken)
if (!userInfo) throw Boom.unauthorized(`Unable to fetch user information`)
.... some logic
return h.response({ statusCode: 200, message: "Success", data })
} catch (error) {
throw error
}
verify.ts
export async function verify(userEmail: string, token: string) {
try {
const ticket = await client.verifyIdToken({
idToken: token,
audience: clientId
})
const payload = ticket.getPayload()
if (!payload) throw Boom.unauthorized("Google authentication failed")
const { sub: userId, name, email, aud, picture: profilePhoto } = payload
if (!aud || aud !== clientId) throw Boom.unauthorized(`Invalid token for ${config.get("appName")}`)
if (!email || email !== userEmail) throw Boom.unauthorized(`Invalid token for email ${userEmail}`)
return { userId, name, profilePhoto, email }
} catch (error) {
logger.error(error)
throw error
}
}
现在,如果出错,它应该是 return 未授权 ,但它是 returning Internal Server Error总是。
对 return 实际信息错误的任何解决方案?
堆栈:
@hapi/hapi : 20.0.3
@hapi/boom : 9.1.1
我想它不会再帮助你了,因为这个问题已经有 9 个月了,但在你发布的代码中,clientId
是 undefined
在 try
块中。这意味着您最终进入 catch
块并且(重新)throw
原始错误。
由于您在 catch
块中使用常规 throw
,hapi 调用 throw Boom.internal()
,这是一个 HTTP 500 内部服务器错误。