如何处理 hapi 验证错误?
How to handle hapi validation errors?
我有以下 hapi 路线代码...
const routeConfig = {
method: 'POST',
path: '/user',
config: {
validate: {
payload: {
firstName: Joi.string().required(),
}
},
handler
}
}
所以当我没有通过 firstName
它会抛出这样的错误
{
"statusCode": 400,
"error": "Bad Request",
"message": "child \"firstName\" fails because [\"firstName\" is required]",
"validation": {
"source": "payload",
"keys": [
"firstName"
]
}
}
现在,我需要在catch中处理上面的错误
const handler = async(request, reply) => {
try {
const payload = request.payload
const createUser = await User.create(payload)
let token = Helpers.createJwt(createUser)
reply({ success: true, message: 'User created successFully', token })
} catch(err) {
// need to do something here to handle the error like
if (err) {
reply ({ error: "firstName is required", message: "Signup unsuccessfull" })
}
}
}
也许你应该试试这样的东西?
const routeConfig = {
method: 'POST',
path: '/user',
config: {
validate: {
payload: {
firstName: Joi.string().required().error(new Error('firstName is required')),
}
},
handler
}
}
看看这个页面here
希望对您有所帮助。
有更好的解决方案:
config: {
validate: {
payload: {
firstName: Joi.string().required(),
},
failAction(request, reply, source, error) {
reply({
error: 'badRequest',
}).code(400);
},
},
},
如果 Joi 验证失败,它会触发 failAction,您将能够处理错误(将其发送到日志服务 and/or return 特定消息)。
它有点隐藏在文档中,但这里是 the relevant part
我必须承认,我没有用 hapi 17 试过...
我有以下 hapi 路线代码...
const routeConfig = {
method: 'POST',
path: '/user',
config: {
validate: {
payload: {
firstName: Joi.string().required(),
}
},
handler
}
}
所以当我没有通过 firstName
它会抛出这样的错误
{
"statusCode": 400,
"error": "Bad Request",
"message": "child \"firstName\" fails because [\"firstName\" is required]",
"validation": {
"source": "payload",
"keys": [
"firstName"
]
}
}
现在,我需要在catch中处理上面的错误
const handler = async(request, reply) => {
try {
const payload = request.payload
const createUser = await User.create(payload)
let token = Helpers.createJwt(createUser)
reply({ success: true, message: 'User created successFully', token })
} catch(err) {
// need to do something here to handle the error like
if (err) {
reply ({ error: "firstName is required", message: "Signup unsuccessfull" })
}
}
}
也许你应该试试这样的东西?
const routeConfig = {
method: 'POST',
path: '/user',
config: {
validate: {
payload: {
firstName: Joi.string().required().error(new Error('firstName is required')),
}
},
handler
}
}
看看这个页面here
希望对您有所帮助。
有更好的解决方案:
config: {
validate: {
payload: {
firstName: Joi.string().required(),
},
failAction(request, reply, source, error) {
reply({
error: 'badRequest',
}).code(400);
},
},
},
如果 Joi 验证失败,它会触发 failAction,您将能够处理错误(将其发送到日志服务 and/or return 特定消息)。
它有点隐藏在文档中,但这里是 the relevant part
我必须承认,我没有用 hapi 17 试过...