无法让Sequelize验证工作

mrv*_*rvn 9 node.js sequelize.js

我正试图在我的Sequelize模型中实现验证.该模型定义如下

var model = sequelize.define('Model', {
  from: {
    type:               DataTypes.STRING,
    allowNull:          false,
    validate: {
      isEmail: true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我正在尝试构建一个实例并验证它:

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

但如果我这样做console.log(err),我明白了{ fct: [Function] }只会.定义抛出异常的自定义验证程序会导致未处理的异常.

我该怎么用validate()

sde*_*old 10

以下是如何使用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)
  })
})
Run Code Online (Sandbox Code Playgroud)

这将导致:

{ from: [ 'Invalid email' ] }
Run Code Online (Sandbox Code Playgroud)

附注:您也可以跳过validate-call,只需创建实例:

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

错误方法将收到与上一代码片段中相同的错误对象.

问候,sdepold.

  • 他们确实需要更新文档以指示验证不再是同步的.validate()的结果肯定是某种promise对象,但是文档完全没有.:( (4认同)
  • 我认为重要的是要明确注意当`validate()`失败时,它仍然会调用`success()`,但是会有一个错误列表.容易假设`error()`将在失败的验证时被调用. (3认同)

Wil*_*ers 5

在Sequelize中验证的另一种方法是使用钩子而不是模型验证.我正在使用'beforeValidate'钩子并添加自定义验证(使用验证器模块)和Promises,验证失败时被拒绝.

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;
};
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我
有用在模型中: -

var model = sequelize.define('Model', {
  from: {
    type:               DataTypes.STRING,
    allowNull:          false,
    validate: {
      isEmail: true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

保存模型时,在控制逻辑中执行以下操作: -

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
            });
Run Code Online (Sandbox Code Playgroud)