Joi.js return 奇怪的错误信息

Joi.js return a weird error message

我正在使用 joi 来验证我的 API 请求。除了错误消息 return 带有斜线 '\' 字符的字段名称外,一切都很好。

{
  "message": "validation error",
  "error": {
    "status": 400,
    "statusText": "Bad Request",
    "errors": [
      {
        "field": "email",
        "location": "body",
        "messages": [
          "\"email\" must be a valid email"
        ],
        "types": [
          "string.email"
        ]
      }
    ]
  }
}

有人遇到过这个问题吗?

您的变量名默认放在引号中,这些引号是 escaped with the backslash character。我找不到太多关于这个的原因所以也许其他人可以在那里权衡。

但是要覆盖此行为,您可以在调用 joi.validate()override the language option 并传入可选的 options 参数。这个例子只是覆盖了字符串的转义。

var joi = require('joi');

var schema = joi.object().keys({
    name: joi.string().required()
});

var x = {
    name: 123
};

var options = {
    language: {
        string: {
            base: '{{key}} must be a string'
        }
    }
};

var result = joi.validate(x, schema, options);

console.log(JSON.stringify(result, null, 2));

要覆盖所有类型的转义字符,请在 options 中指定一个 key 参数。请注意末尾的 space。

var options = {
    language: {
        key: '{{key}} '
    }
};

可以找到有关如何覆盖 language 的更多详细示例 here