我正在通过joi在hapi上实现自定义验证错误消息。
server.route({
path: '/test/inputname',
method: ['PUT','POST'],
handler: async (request, h) => {
try{
const created = await MemberSchema.addUser(
{"input_name": request.payload.input_name}
)
return h.response(created).code(201);
} catch(err){
console.log(err.message);
return h.response(err.message).code(400);
}
},
options: {
validate: {
payload: Joi.object({
input_name: Joi.string()
.min(2)
.max(30)
.required()
.messages({
'string.base' : `"input_name" should be a type of 'text'`,
'string.empty' : `"input_name" cannot be an empty field`,
'string.min' : `"input_name" should have a minimum length of {#limit}`,
'any.required' : `"input_name" is a required field`,
}),
}),
options:{
allowUnknown: true
,abortEarly: false
}
}
}
});
但是,当我发布无效数据时,它始终显示如下。
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid request payload input"
如何解决?
p.s 我正在使用以下版本。
node v12.16.2
"@hapi/hapi": "^19.1.1",
"@hapi/joi": "^17.1.1",
答案 0 :(得分:0)
可能需要失败动作。
options: {
validate: {
payload: MemberSchema.memberSchema
,options:{
allowUnknown: true
,abortEarly: false
}
,failAction: async (request, h, err) => {
console.log(err);
throw err;
}
}
},
然后消息更改如下。
{
"statusCode": 400,
"error": "Bad Request",
"message": "\"input_name\" should have a minimum length of 2",
"validation": {
"source": "payload",
"keys": [
"input_name"
]
}
}