在自定义 Joi/celebrate 消息上使用验证错误值
Use validation error values on custom Joi/celebrate messages
我正在为服务器使用 nodejs/typescript 堆栈创建一些东西,我正在尝试定义自定义通用错误消息而不是每个字段的消息。像这样:
routes.post(
'/points',
upload.single('image'),
celebrate({
body: Joi.object().keys({
name: Joi.string().required(),
email: Joi.string().required().email(),
whatsapp: Joi.number().required(),
latitude: Joi.number().not(0).required(),
longitude: Joi.number().not(0).required(),
city: Joi.string().required(),
uf: Joi.string().required().max(2),
items: Joi.string().required()
}),
}, {
abortEarly: false,
messages: {
'string.empty':'{context.label} cant be empty!'
}
}),
pointsController.create
);
如您所见,我正在尝试在自定义消息中使用 variable/value。我根据 celebrate/joi 错误出现的错误条目得到了 'key',它是这样的:
{
message: ' cant be empty!',
path: [ 'items' ],
type: 'string.empty',
context: { label: 'items', value: '', key: 'items' }
}
有没有办法做到这一点?
该消息不像我想象的那样 'parsing' {context.label}。我的意思是,这是在黑暗中拍摄的,因为如果完全支持这样的东西,我找不到任何地方。
您可以使用{#label}
来实现您想要的。
尝试:
.messages({
'string.empty': '{#label} cant be empty!',
'any.required': '{#label} is a required field for this operation'
})
所有其他类型依此类推。
其他值也可以类似访问。例如,如果您想概括字符串 min/max:
的错误消息
.messages({
'string.min': '{#label} should have a minimum length of {#limit}'
})
此处,在您为字符串创建架构时设置了限制(分钟)。
我正在为服务器使用 nodejs/typescript 堆栈创建一些东西,我正在尝试定义自定义通用错误消息而不是每个字段的消息。像这样:
routes.post(
'/points',
upload.single('image'),
celebrate({
body: Joi.object().keys({
name: Joi.string().required(),
email: Joi.string().required().email(),
whatsapp: Joi.number().required(),
latitude: Joi.number().not(0).required(),
longitude: Joi.number().not(0).required(),
city: Joi.string().required(),
uf: Joi.string().required().max(2),
items: Joi.string().required()
}),
}, {
abortEarly: false,
messages: {
'string.empty':'{context.label} cant be empty!'
}
}),
pointsController.create
);
如您所见,我正在尝试在自定义消息中使用 variable/value。我根据 celebrate/joi 错误出现的错误条目得到了 'key',它是这样的:
{
message: ' cant be empty!',
path: [ 'items' ],
type: 'string.empty',
context: { label: 'items', value: '', key: 'items' }
}
有没有办法做到这一点? 该消息不像我想象的那样 'parsing' {context.label}。我的意思是,这是在黑暗中拍摄的,因为如果完全支持这样的东西,我找不到任何地方。
您可以使用{#label}
来实现您想要的。
尝试:
.messages({
'string.empty': '{#label} cant be empty!',
'any.required': '{#label} is a required field for this operation'
})
所有其他类型依此类推。
其他值也可以类似访问。例如,如果您想概括字符串 min/max:
的错误消息.messages({
'string.min': '{#label} should have a minimum length of {#limit}'
})
此处,在您为字符串创建架构时设置了限制(分钟)。