[英]Hapi/Joi validation error log
我正在使用hapi js和couchbase開發API。 我正在使用log4js來記錄錯誤。
{
// Add a user level
method: 'POST',
path: '/api/v1/userlevel',
config: {
handler: (request, reply) => {
const userlevel = new Userlevel(request.payload);
userlevel.save((err) =>{
if(err) {
return reply({
status: 400,
message: err.message
}).code(400);
// logger.error(err);
}
// logger.debug(reply);
return reply(userlevel).code(201);
});
},
validate: {
payload: {
group_id: Joi.string(),
name: Joi.string(),
status: Joi.string(),
index_id: Joi.number(),
device_id: Joi.string(),
created_at: Joi.string(),
updated_at: Joi.string(),
sys_version: Joi.string()
}
}
}
}
當我向此端點發送POST請求時,它顯示錯誤
POST請求
{
"group_id" : "test1",
"name" : "test1",
"status":"test1",
"index_id":1,
"device_id":"test1",
"created_at":7,
"updated_at":7,
"sys_version":7
}
錯誤
{"statusCode":400,"error":"Bad Request","message":"child \"created_at\" fails because [\"created_at\" must be a string]","validation":{"source":"payload","keys":["created_at"]}}
我需要記錄此錯誤消息。 我試圖找到這條消息產生的地方。 但我找不到它。 請幫忙。 先感謝您。
如果您願意遷移到Hapi 17,以下內容將起作用。 如果您仔細閱讀文檔,可能會有類似的Hapi 16解決方案。
如果路由驗證失敗,可以使用failAction
回調方法,這里似乎是記錄錯誤的最佳位置。
const config = {
routes: {
validate: {
failAction: async (request, h, err) =>
{
if (err.isJoi)
{
// do something with error
console.log(err.message);
}
throw err;
}
}
}
};
const server = new Hapi.Server(config);
你可以用Hapi 16幾乎以同樣的方式實現這一點,見下文:
server.route({
method: 'GET',
path: '/what/ever,
handler: function(request, reply) {
},
config: {
validate: {
payload: {},
failAction: function(request, reply, source, error) {
// do your stuff here
// you should also reply something
}
}
});
我認為你可以提供自定義錯誤消息
{
method: 'POST',
path: '/api/v1/userlevel',
config: {
handler: (request, reply) => {
const userlevel = new Userlevel(request.payload);
userlevel.save((err) =>{
if(err) {
return reply({
status: 400,
message: err.message
}).code(400);
// logger.error(err);
}
// logger.debug(reply);
return reply(userlevel).code(201);
});
},
validate: {
payload: {
group_id: Joi.string().error(new Error('custom message')),
name: Joi.string().error(new Error('custom message')),
status: Joi.string().error(new Error('custom message')),
index_id: Joi.number().error(new Error('custom message')),
device_id: Joi.string().error(new Error('custom message')),
created_at: Joi.string().error(new Error('custom message')),
updated_at: Joi.string().error(new Error('custom message')),
sys_version: Joi.string().error(new Error('custom message'))
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.