嵌套对象数组的 Joi 错误消息

Joi error message for nested array of object

我有来自客户端的用户输入,我正在使用 Joi 进行后端验证。

const Joi = require("joi")

const schema = Joi.array().items(
    Joi.object().required().keys({
      name: 'filter_list',
      value: Joi.array().items(

        Joi.object().required().keys({
          id: 'popular_filters',
          value: Joi.array().required().items(

            Joi.object().required().keys({
              id: Joi.string().required(),
              name: Joi.string().required(),
              items: Joi.array().items(

                Joi.object().keys({
                  id: Joi.string().required(),
                  name: Joi.string().required()
                })

              )
            })

          )
        })
      )
    })
);

// Return result.
const result = Joi.validate([
    {
        name: 'filter_list',
        value: [{
          id: 'popular_filters',
          value: [{
            id: '1',
            name: 'Gym',
            items: [{
              id: 1, // bad error msg
              name: 'x'
            }]
          }]
        }]
      }
], schema);

console.log('error: ', result.error);

演示:https://runkit.com/eldyvoon/5d7b59184bd7b300144a2730

我收到

的错误
Error: "value" at position 0 fails because [child "value" fails because ["value" at position 0 fails because [child "value" fails because ["value" at position 0 fails because [child "items" fails because ["items" at position 0 fails because [child "id" fails because ["id" must be a string]]]]]]]]

来自 Joi。我不想提供自定义错误消息,但 Joi 应该给我 id should be in string not number

只需在定义模式时在链中提供一个错误函数。

Joi.object().keys({
  id: Joi.string().required().error(new Error('id should be in string not number')),
  name: Joi.string().required()
})