How do I handle a Unique Field in sails?

后端 未结 6 1222
囚心锁ツ
囚心锁ツ 2020-12-29 15:35

I\'ve defined a unique field in my model but when I tried to test it seems like it\'s not being checked by sails because I get a Error (E_UNKNOWN) :: Encountered an un

6条回答
  •  鱼传尺愫
    2020-12-29 16:15

    @tvollstaedt Your reponse worked like a charm, and by the way is the most elegant way to handle "uniqueness" in sailsjs so far.

    Thank you!

    Here is my two cents to add custom validation messages using "sails-validation-messages":

    module.exports = {
      /* Custom validation types   */
      uniqueEmail: false,
    	types: {
    		uniqueEmail: function(value) {
    			return uniqueEmail;
    		}
    	},
      attributes: {
      	firstname:{
    			type: 'string',
    			required: true,
    		},
    		lastname:{
    			type: 'string',
    			required: true,
    		},
    		email:{
    			type: 'email',
    			required: true,
    			unique: true,
    			maxLength:50,
    			uniqueEmail:true
    		},
    		status:{
    			type: 'string'
    		}
      },
      beforeValidate: function(values, cb) {
      	Application.findOne({email: values.email}).exec(function (err, record) {
      		console.log('before validation ' + !err && !record);
      		uniqueEmail = !err && !record;
      		cb();
      	});
      },
      validationMessages: {
      	firstname: {
          required : 'First name is required',
        },
        lastname: {
          required : 'Last name is required',
        },
        email: {
          required : 'Email is required',
          email : 'Enter valid email',
          uniqueEmail: 'Email already registered'
        },
      }
    };

    Then in the controller you can handle the error like this:

    module.exports = {
    	create:function(req, res){
        var values = req.allParams();
    	Application.create({
    	  email:values.email,
    	  firstname:values.firstname,
    	  lastname:values.lastname,
    	  _csrf: values.csrf
    	})
    	exec(function created (err, values) {
          if(err) {
    		console.log(err);
    		if(err.invalidAttributes) {
              validator = require('sails-validation-messages');
    		  err.invalidAttributes = validator(Application, err.invalidAttributes);
    		    return res.negotiate(err);
    	      }
    	    }
    	  });
    	}
    };

    Thanks

提交回复
热议问题