如何在Node.js中使用Sequelize设置模型验证?

4

我是一名新手,正在学习nodejs。我已经使用sequelize作为nodejs的ORM工具。但是我无法为属性设置验证;

models/farmer.js

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Farmer = sequelize.define('Farmer', {
    username:{
            type: DataTypes.STRING,
            allowNull: false,
    },
    address: DataTypes.STRING,
    email: {
        type: DataTypes.STRING,
        validate: {
           isEmail: true
        }
    },
    phone:{
            type: DataTypes.STRING,
            allowNull: false,
    },
  }, {
    classMethods: {
      associate: function(models) {
          Farmer.hasMany(models.Task);
        // associations can be defined here
      }
    }
  });
  return Farmer;
};

错误:

可能未处理的SequelizeValidationError:验证错误 在 /Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/lib/instance-validator.js:149:14 尝试捕获1 (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/util.js:43:21) 在Promise $ _callHandler [作为_callHandler] (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/promise.js:639:13) 在Promise $ _settlePromiseFromHandler [作为_settlePromiseFromHandler] (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/promise.js:653:18) 在Promise $ _settlePromiseAt [作为_settlePromiseAt] (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/promise.js:817:14) 在Promise $ _settlePromises [作为_settlePromises] (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/promise.js:951:14) 在Async $ _consumeFunctionBuffer [作为_consumeFunctionBuffer] (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/async.js:75:12) 在异步$consumeFunctionBuffer (/Users/esmrkbr/Desktop/nodejs/sequelize-express-demo/node_modules/sequelize/node_modules/sequelize-bluebird/js/main/async.js:38:14) 在doNTCallback0 (node.js:419:9) 在process._tickCallback (node.js:348:13)

如何设置验证模型?

1个回答

2
这段文字的意思是:

This :

Possibly unhandled SequelizeValidationError: Validation error at

表示你的 Sequelize 验证已经生效。它会检查验证,当验证失败时会抛出错误(SequelizeValidationError)。

但是这个:

Possibly unhandled

表示你没有处理这个错误。你应该捕获这个错误并进行处理(例如发送适当的错误代码响应)。

例如,当你创建一个新的“农民”时,你的代码可能如下所示:

Farmer.create({
  //your data
}).then(function(){
  //do something when Farmer is created
}).catch(function(err){
  //do something when you get error
  //you could check if this is validation error or other error
});

有时候在 sequelize 外部验证错误是个好主意(但不要移除 sequelize 中的验证,让两个验证一起工作)(我在这里写了一些论点here)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接