lykmapipo / sails-hook-validation

Custom validation error messages for sails model with i18n support
104 stars 29 forks source link

Issue on sails-hook-validation/lib/validateCustom.js:90 #14

Closed jlgit closed 8 years ago

jlgit commented 9 years ago

I just downloaded the code and follow your instructiosn and for some reason I'm gettingt he following error when running the create method:

/apps/sails/node_modules/sails-hook-validation/lib/validateCustom.js:90 customMessage = messages[validationField][fieldErro ^ TypeError: Cannot read property 'required' of undefined

lykmapipo commented 9 years ago

@jlgit

Hope it help

jlgit commented 9 years ago

I'm using: sails -v 0.11.0

And yes I tried implementing it all exactly as you explain in your readme file.

//model validation messages definitions validationMessages: { email: { required: 'Email is required', unique: 'Email address is already taken' }, username: { required: 'Username is required' } },

lykmapipo commented 9 years ago

@jlgit

Please try to look on example model on how to properly define custom validation messages.

HIH.

jlgit commented 9 years ago

This is how my whole model looks... what am I doing wrong?

module.exports = {

attributes: {
    name: {
        type: 'string',
        required: true,
        minLength: 2,
        maxLength: 30
    },

    username: {
        type: 'string',
        required: true,
        unique: true,
        minLength: 2,
        maxLength: 30
    },

    email:{ 
        type: 'email',
        unique: true,
        required: true,
        unique: true
    },

    password:{
        type: 'string',
        required: true,
        minLength: 6,
        maxLength: 50
    },

    verifyPassword: function (password) {
        return bcrypt.compareSync(password, this.password);
    },

    changePassword: function(newPassword, cb){
        this.newPassword = newPassword;
        this.save(function(err, u) {
            return cb(err,u);
        });
    },

    toJSON: function() {
        var obj = this.toObject();
        return obj;
    }
},

//model validation messages definitions
validationMessages: {
    email: {
        required: 'Email address is required',
        unique: 'Email address is already taken'
    },
    username: {
        required: 'Username is required'
    }
}

};

lykmapipo commented 9 years ago

@jlgit

If you look on line, it seems hook try to find a custom message for a validation rule and it does not found it.

Currently, sails-hook-validation require for every validation rule defined to have an associated custom message in validationMessages. As you can see some of your attributes have validation rules but they dont have associated custom error message. This is where you get a problem.

A quick fix is to define empty custom message for per validation rule. Otherwise sails-hook-validation need a fix to this to allow validation rule to exist without their associated custom message.

Hope it helps.

jlgit commented 9 years ago

Following your recommendation I've updated my model still getting the same error message, my new model look like this now:

module.exports = {

attributes: {
    name: {
        type: 'string',
        required: true,
        minLength: 2,
        maxLength: 30
    },

    username: {
        type: 'string',
        required: true,
        unique: true,
        minLength: 2,
        maxLength: 30
    },

    email:{ 
        type: 'email',
        required: true,
        unique: true
    },

    password:{
        type: 'string',
        required: true,
        minLength: 6,
        maxLength: 50
    }
},

//model validation messages definitions
validationMessages: {
    name: {
        type: 'You should submit an string',
        required: 'You should enter your name',
            minLength: 'Your name should be at least 2 characters long',
            maxLength: 'Your name should be shorter than 30 characters'
    },
    username: {
        type: 'You should submit an string',
        required: 'You should enter a username',
        unique: 'Selected username is already taken',
            minLength: 'Your name should be at least 2 characters long',
            maxLength: 'Your name should be shorter than 30 characters'
    },
    email: {
        type: 'You should submit an string',
        required: 'Email address is required',
        unique: 'Email address is already taken',
        email: 'Provide valid email address'
    },
    password: {
        type: 'You should submit an string',
        required: 'You should enter your password',
        minLength: 'Your password should be at least 6 characters long',
        maxLength: 'Your password should be shorter than 50 characters'
    }
}

};

lykmapipo commented 9 years ago

@jlgit

May you please fork this repo, add yout model under api/models then send me a pull request maybe be i can track it use failed test cases.

Regards.

javiercornejo commented 9 years ago

Hi Guys! Same problem here. Do you have any updates? I'll appreciate Best

javiercornejo commented 9 years ago

I already solved it. I added enum message and It works. Thanks

fhereduardo90 commented 9 years ago

Hi guys, I have the same problem. Do you have any fix or update for this issue? thanks.

fhereduardo90 commented 9 years ago

I'm using sails version 0.11.0 and sails-hook-validation 0.4.1, this is the log that my server printed

/node_modules/sails-hook-validation/lib/validateCustom.js:92 customMessage = messages[validationField][fieldErro ^ TypeError: Cannot read property 'required' of undefined

lykmapipo commented 8 years ago

@FherUnity @jlgit @javiercornejo

Check v0.4.3