Node.js + Joi how to display a custom error messages?

后端 未结 12 1542
故里飘歌
故里飘歌 2020-12-01 00:56

It seems pretty straight forward to validate user\'s input in Node.js RESTapi with Joi.

But the problem is that my app is not written in English. That m

12条回答
  •  北海茫月
    2020-12-01 01:37

    Edit:

    Make sure you are using @hapi/joi - https://www.npmjs.com/package/@hapi/joi, version 16 and above.


    Original answer:

    The current way (I personally find it better) is to use .messages() (or .prefs({messages})).

    const Joi = require('@hapi/joi');
    
    const joiSchema = Joi.object({
      a: Joi.string()
        .min(2)
        .max(10)
        .required()
        .messages({
          'string.base': `"a" should be a type of 'text'`,
          'string.empty': `"a" cannot be an empty field`,
          'string.min': `"a" should have a minimum length of {#limit}`,
          'any.required': `"a" is a required field`
        })
    });
    
    const validationResult = joiSchema.validate({ a: 2 }, { abortEarly: false });
    console.log(validationResult.error); // expecting ValidationError: "a" should be a type of 'text'
    

    Usage of .errors() is not recommended just to update default message with custom message.

    .prefs({ messages }) is an elaborate way to provide more options as preferences. The other options for prefs are taken directly from options of .validate()

    Further read: https://github.com/hapijs/joi/issues/2158


    Update 1: I saw that the above explanation did not work out for some folks, so I have put up some code to test yourself. Check it here: https://runkit.com/embed/fnfaq3j0z9l2

    Also updated the code snippet shared previously to have details from package inclusion, to usage, to calling the actual validation method.


    Update 2: The list of joi error types and their description (for .messages() - like string.base, array.unique, date.min etc..) is available here.

提交回复
热议问题