Skip to content

Cannot read property 'describe' of undefined #6

@felipe2rod

Description

@felipe2rod

Hi! I have the following code:

const Sequelize = require('sequelize');
require('sequelize-isunique-validator')(Sequelize);
const Model = Sequelize.Model;
const sequelize = require('../config/db');
class User extends Model {}
User.init({
  // attributes
  username: {
    type: Sequelize.STRING(15),
    allowNull: false,
	isUnique: true,
    validate: {
    	isAlphanumeric: {
    		args: true,
    		msg: 'São aceitos apenas letras e números nesse campo.'
    	},
    	isUnique: sequelize.validateIsUnique('username','Este nome já está sendo utilizado!'),
    	notNull: {
    		args: true,
    		msg: 'Preencha este campo'
    	}
    }
  },
  email: {
    type: Sequelize.STRING(70),
    allowNull: false,
    unique: {
	    args: true,
	    msg: 'Este e-mail já está sendo utilizado!'
	},
    validate: {
    	isEmail: {
    		args: true,
    		msg: 'Digite um e-mail válido.'
    	},
    	notNull: {
    		args: true,
    		msg: 'Preencha este campo'
    	}
    }
  },
  password: {
  	type: Sequelize.STRING(15),
  	allowNull: false,
  	validate:{
  		len: {
	  		args: [5,10],
	  		msg: 'A senha deve possuir entre 5 e 10 caracteres.'
	  	},
	    notNull: {
	    	args: true,
	    	msg: 'Preencha este campo'
	    }
  	}
  },
  first_name: {
    type: Sequelize.STRING(15),
    allowNull: false,
    validate: {
    	is: {
    		args: ["^[a-z]+$",'i'],
    		msg: 'São aceitos apenas letras nesse campo.'
    	},
	    notNull: {
	    	args: true,
	    	msg: 'Preencha este campo'
	    }
    }
  },
  last_name: {
    type: Sequelize.STRING(15),
    validate: {
    	is:{
    		args: ["^[a-z]+$",'i'],
    		msg: 'São aceitos apenas letras nesse campo.'
    	}
    }
  },
  is_admin: {
    type: Sequelize.BOOLEAN,
    defaultValue: false
  },
 
}, {
  sequelize,
  hooks: {
	  beforeCreate: (user) => {
	    const salt = bcrypt.genSaltSync();
	    user.password = bcrypt.hashSync(user.password, salt);
	  }
	},
	instanceMethods: {
	  validPassword: function(password) {
	    return bcrypt.compareSync(password, this.password);
	  }
  }, 
  modelName: 'user'
  // options
});

function cryptPassword(password, callback) {
    bcrypt.genSalt(10, function(err, salt) { // Encrypt password using bycrpt module
        if (err)
            return callback(err);

        bcrypt.hash(password, salt, function(err, hash) {
            return callback(err, hash);
        });
    });
}

When i run a update or insert with a existing username, the return is it:

{
    "name": "SequelizeValidationError",
    "errors": [
        {
            "message": "Cannot read property 'describe' of undefined",
            "type": "Validation error",
            "path": "username",
            "value": "John1",
            "origin": "FUNCTION",
            "instance": {
                "id": null,
                "username": "John1",
                "email": "felip13e2-rf@hotmail.com",
                "password": "felipe",
                "first_name": "Felipe",
                "is_admin": false,
                "updatedAt": "2019-06-24T20:15:07.899Z",
                "createdAt": "2019-06-24T20:15:07.899Z"
            },
            "validatorKey": "isUnique",
            "validatorName": null,
            "validatorArgs": [],
            "original": {}
        }
    ]
}

My package.json is:

{
  "name": "timtim-backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Felipe Rodrigues",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^3.0.6",
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "mysql2": "^1.6.5",
    "sequelize": "^5.8.12",
    "sequelize-isunique-validator": "^1.1.1"
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions