无法获得Sequelizevalidation工作

我试图在我的Sequelize模型中实现validation。 该模型定义如下

var model = sequelize.define('Model', { from: { type: DataTypes.STRING, allowNull: false, validate: { isEmail: true } } } 

然后我试图build立一个实例并validation它:

 var m = Model.build({ from: 'obviously not a email' }); var err = m.validate(); 

但是,如果我做了console.log(err) ,我只能得到{ fct: [Function] } 。 定义引发exception的自定义validation器会导致未处理的exception。

我应该如何正确使用validate()

以下是如何使用Sequelize v2.0.0解决您的问题:

 var Sequelize = require("sequelize") , sequelize = new Sequelize("sequelize_test", "root") var Model = sequelize.define('Model', { from: { type: Sequelize.STRING, allowNull: false, validate: { isEmail: true } } }) Model.sync().success(function() { Model.build({ from: "foo@bar" }).validate().success(function(errors) { console.log(errors) }) }) 

这将导致:

 { from: [ 'Invalid email' ] } 

注意:你也可以跳过validate -call而只是创build实例:

 Model.sync().success(function() { Model .create({ from: "foo@bar" }) .success(function() { console.log('ok') }) .error(function(errors) { console.log(errors) }) }) 

错误方法将会收到与前面的代码片段相同的错误对象。

问候,sdepold。

在Sequelize中validation的另一种方法是使用钩子而不是模型validation。 我正在使用'beforeValidate'钩子,并添加自定义validation(使用validation模块)与承诺,validation失败时被拒绝。

 var validator = require('validator'); module.exports = function(sequelize, DataTypes) { var User = sequelize.define("User", { email: { type:DataTypes.STRING }, password: { type:DataTypes.STRING } }); //validate here User.hook('beforeValidate', function(user, options) { if(validator.isEmail(user.email)){ return sequelize.Promise.resolve(user); }else{ return sequelize.Promise.reject('Validation Error: invalid email'); } }); return User; }; 

这对我有效
在模型中使用: –

 var model = sequelize.define('Model', { from: { type: DataTypes.STRING, allowNull: false, validate: { isEmail: true } } } 

在保存模型的同时,在您的控制逻辑中执行此操作:

 var Sequelize = require('sequelize'); var Model = require('your_model_folderpath').model; Model.create({from: 'not email'}).then(function(model) { // if validation passes you will get saved model }).catch(Sequelize.ValidationError, function(err) { // responds with validation errors }).catch(function(err) { // every other error });