在自定义 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}'
})

此处,在您为字符串创建架构时设置了限制(分钟)。