Topics

Custom validation messages for sails js

//in api/models/User.js
function validationError(invalidAttributes, status, message) {
  var WLValidationError = require('../../node_modules/sails/node_modules/waterline/lib/waterline/error/WLValidationError.js');
  return new WLValidationError({
      invalidAttributes: invalidAttributes,
      status: status,
      message: message
    }
  );
}
var User = {
  attributes: {
    //...
  },
  ownValidate:: function (values, update, cb) {
    //example of not allowed param on update
    //if it is an update then do not allow email param
    if (update && values.email) {
      return cb(validationError({
        email: [
          {
            message: 'Email is not allowed for updates.'
          }
        ]
      }, 400 /*status*/));
    }
    sails.models['user'].findOne(values.email).exec(function (err, user) {
      if (err) return cb(err);
      if (user) {
        return cb(validationError({
          email: [
            {
              value: values.email,
              rule: 'E_UNIQUE'
              /* unique validation message is left for the default one here */
            }
          ]
        }, 409));
      }
    });
  },
  beforeCreate: function (values, cb) {
    return sails.models['user'].ownValidate(values, false, cb);
  },
  beforeUpdate: function (values, cb) {
    return sails.models['user'].ownValidate(values, true, cb);
  }
}

For blueprint custom messages validation

// For adding custom messages if using blueprint

// In reponses/badrequest.js
// after 
//  if (sails.config.environment === 'production') {
//    data = undefined;
//  }
// add
  if (data.invalidAttributes !== undefined) {
    var attributes = data.invalidAttributes;
    _.each(attributes, function (attribute, key) {
      _.each(attribute, function (properties) {
        var rule = properties.rule;
        var message = false;
        try {
          message = sails.__('validation.' + key + '.' + rule, key);
        }
        catch (e) {
        }

        try {
          message = sails.__('validation.' + rule, key);
        }
        catch (e) {
        }

        if (message && message != 'validation.' + rule && message != 'validation.' + key + '.' + rule) {
          properties.message = message;
        }
      });
    });
  }
  
  
  
  // In config/i18n.js 
  //add
  objectNotation: true
  
  // example :
  //In config/locales/en.json or your locale file
  //add
    "validation": {
      "isJson": "invalid JSON format in %s"
    }

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close