【问题标题】:How to set Joi validations with custom messages?如何使用自定义消息设置 Joi 验证?
【发布时间】:2021-01-30 07:36:59
【问题描述】:

我试图在 Joi 中使用一些自定义消息设置一些验证。因此,例如,我发现当字符串必须至少包含 3 个字符时,我们可以使用“string.min”键并将其与自定义消息相关联。示例:

  username: Joi.string().alphanum().min(3).max(16).required().messages({
    "string.base": `Username should be a type of 'text'.`,
    "string.empty": `Username cannot be an empty field.`,
    "string.min": `Username should have a minimum length of 3.`,
    "any.required": `Username is a required field.`,
  }),

现在这是我的问题:

问题

// Code for question
  repeat_password: Joi.ref("password").messages({
    "string.questionHere": "Passwords must match each other...",
  }),

什么方法 (questionHere) 名称需要设置为 repeat_password 才能通知用户密码必须匹配?我什至不知道Join.ref("something") 是否接受.messages({...})...

如果有人可以在 Joi 文档中给我一些帮助,我还没有找到任何东西......

【问题讨论】:

    标签: node.js joi


    【解决方案1】:

    您试图在这里找到的是错误type。可以在 joivalidate 函数返回的错误对象中找到。例如:error.details[0].type 将为您提供所需的内容。

    关于您的第二个问题,Join.ref("something") 不接受.messages({...})。在这里您可以将validref 结合使用。

    例如:

    const Joi = require('joi');
    
    const schema = Joi.object({
            username: Joi.string().alphanum().min(3).max(16).required().messages({
                "string.base": `Username should be a type of 'text'.`,
                "string.empty": `Username cannot be an empty field.`,
                "string.min": `Username should have a minimum length of 3.`,
                "any.required": `Username is a required field.`,
              }),
              password: Joi.string().required(),
              password_repeat: Joi.any().valid(Joi.ref('password')).required().messages({
                "any.only" : "Password must match"
              })
    });
    
    const result = schema.validate({ username: 'abc', password: 'pass', password_repeat: 'pass1'});
    
    
    // In this example result.error.details[0].type is "any.only"

    【讨论】:

    • 完美,解决了问题!非常感谢@Sahal!
    • 我在 .ref(...).messages is not a function 错误中苦苦挣扎了一段时间。解决了我的问题。我没想过将它封装在Joi.any().valid() 中。非常感谢!
    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多