Joi验证:捕获自定义错误消息

时间:2018-04-19 07:08:33

标签: javascript node.js validation joi

我正在使用带有NodeJs / Typescript的Joi Library进行验证。 验证后期操作的请求正文。

我正在使用语言选项为各个字段验证提供自定义消息。

以下是代码

const bodySchema = Joi.object().keys({
    // had to change from string to any so as to avoid multiple messages when empty
    field1: Joi.any().required().valid('Dummy').options({
        language: {
            any: {
                // wrt empty: specific error  message not displaying  with any but empty error is handled by allowOnly custom message. Anways there is no custom message for empty in requirements
                // empty: '!!The parameter \'field1\' cannot be empty. It must be \'Dummy\'',
                required: '!!The parameter \'field1\' is mandatory and must be the value \'Dummy\'',
                allowOnly: '!!Invalid value for parameter \'field1\'. It must be \'Dummy\''
            // how to capture value passed for field1 in the message?
            }
        }
    }),

如何捕获在自定义错误消息

中作为requestBody传递的错误字段值

例如,如果我传递POST端点的请求主体

 {
  "field1": "wrongvalue",
 }    

预期的自定义消息 无效的值' wrongvalue'对于参数\' field1 \'。它必须是\' Dummy \''

我已经通过JOI API,但找不到任何引用这样做。 虽然正则表达式选项具有捕获传递值的功能。 {{value}}适用于正则表达式,但不适用于其他选项。

如果有办法捕获价值,请告诉我。

1 个答案:

答案 0 :(得分:0)

尝试一下……

const typeSchema = Joi.object({field1: Joi
    any()
    .required()
    .valid('Dummy')            
    .error(errors => {
      errors.forEach(err => {
        switch (err.type) {
          case "string.base":
          case "required":
            err.message = "field 1 is mandatory and must be the value";
            break;
          case "any.allowOnly":
            err.message = "field1 must be Dummy";
            break; 
          default:
            console.log('validate error type missing', err.type);
            break;
        }
      });
      return errors;
    }),

})