[英]Form submits despite of javascript validation returning false and displaying alert message
[英]JOI validation is not returning all the errors despite setting abort early false
我一直在嘗試通過 joi 模式驗證我的有效負載。 但它並沒有返回我在模式中編寫的錯誤,而是只顯示一個錯誤。 即使我給像 name=int 這樣的有效負載,盡管給第二個輸入(即用戶名)一個整數值,但也只顯示一個自定義錯誤:
{“狀態代碼”:400,
"error": "錯誤請求",
“消息”:“名稱需要一個字符串”}
而是應該打印
{“狀態代碼”:400,
"error": "錯誤請求",
"message": "name 需要一個字符串"/"username 需要一個字符串" }
這是我的代碼:server.js
const server = Hapi.server({
port: 3000,
routes: {
validate: {
options: {
abortEarly: false
},
failAction: async (request, response, err) => {
throw Boom.badRequest(err.message);
},
},
},
});
joi-schmea.js
const NamePayload = Joi.object().keys({
name: Joi.string().required().error(new Error('name expecting a string')),
username: Joi.string().required().error(new Error('username expecting a string')),
age: Joi.integer().required().error(new Error('age expecting a number')),
});
路線.js:
validate: {
payload: Schema.NamePayload,
},
我希望郵遞員不僅顯示第一條錯誤消息,還顯示所有錯誤消息。 而且我也不想使用默認錯誤消息child must be string/int
type error 這就是我使用新錯誤的原因。 我已閱讀有關該錯誤的所有 stackoverflow 文章,但沒有解決我的問題。 這是我使用的 hapi 和 joi 版本:
@hapi/joi:^15.0.3,
@hapi/hapi:^18.3.1,
根據我的理解,每個Joi錯誤都會拋出一個包含密鑰詳細信息的ValidationError
,這是一個錯誤數組,每個錯誤都包含您的自定義錯誤消息,並且通過在您的模式中執行新的Error() ,您將重寫關鍵細節。 所以,我建議你這樣做:
用這個替換你的架構錯誤:
Joi.object().keys({
name: Joi.string().required().error(() => 'name expecting a string'),
username: Joi.string().required().error(() => 'username expecting a string'),
age: Joi.number().integer().required().error(() => 'age expecting a number'),
});
然后在您的failAction Concat的那些內部err.details消息:
failAction: async (request, response, err) => {
throw Boom.badRequest(err.details.map((error) => error.message).join('/'));
}
對於此有效負載:
{
"name": 10
}
你會得到這個回應:
{
"statusCode": 400,
"error": "Bad Request",
"message": "name expecting a string/username expecting a string/age expecting a number"
}
如果有人覺得這有幫助,請寫下:
在 joi.validate() 中使用:{ abortEarly: false }
例如: const joiResult = joiSchema.validate( { name, email, }, { abortEarly: false } );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.