validation - Sequelize 验证违规

标签 validation express sequelize.js

我正在开发一个项目,管理员可以在其中添加聊天室,这些聊天室有五个字段:(id、创建者(创建它的管理员)、名称、slug 和createdAt),我收到此错误未处理的拒绝 SequelizeValidationError : notNull 违规:名称不能为空

//models/user.js
var Sequelize               = require('sequelize');
var passportLocalSequelize  = require('passport-local-sequelize');
var env                     = process.env.NODE_ENV || 'development';
var config                  = require(__dirname + '/../config/config.json')[env];

var mydb  = new Sequelize(config.database, config.username, config.password, config);

// We do not need additional features for our users, so we just use the default user model
// provided by Passport
var User = passportLocalSequelize.defineUser(mydb,
    {
        email: { type: Sequelize.STRING, allowNull: false, unique: true }
    },{}
);

//Function at a prototype level for performance optimization
User.Instance.prototype.$Model.findByEmail = function(email, done){
   var parameters = {};
   parameters.email = email;
   var user = this.findOne({where: parameters});
   user.then(function(usr) {
       done(null, usr);
   });
}

mydb.authenticate().then(function(done)
{
  if(mydb.sync({force: false}))
    done();
}).catch(function(error,user)
{
      console.log(error);
});

module.exports = User;

//models/chat.js
var Sequelize = require('sequelize');
var env       = process.env.NODE_ENV || 'development';
var config    = require(__dirname + '/../config/config.json')[env];
var User      = require('./user');

var mydb  = new Sequelize(config.database, config.username, config.password, config);

var Chat = mydb.define('Chat',
{
    id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
    name: { type: Sequelize.STRING, unique: true, allowNull: false,
        validate: {
            notNull: { args: true, msg: "You must enter a name" }
        },
        set: function(val) {
            val = val.toLowerCase().trim();
            this.setDataValue('title', val );
            this.setDataValue('slug', val.split(" ").join("_"));
        }
    },
    slug: { type: Sequelize.STRING, unique: true, allowNull: false },
    creator: { type: Sequelize.INTEGER, references: { model: User, key: 'id'    }}
},
{
    timestamps: true,
    updatedAt: false // I only want the field createdAt
}
)

mydb.authenticate().then(function(done){
    if(mydb.sync({force: false}))
       done()
}).catch(function(err, chat){
    console.log(err);
});

module.exports = Chat;


//routes/admin.js
router.post("/dashboard",isAuthenticated, function(req,res){
    if (req.body.chatName) {
        try{
           console.log(req.body.chatName);
           console.log(Chat.create({ name: req.body.chatName, creator: req.user.id }));
        }
        catch (e){
          console.log(e.message);
        }

    }
});

我只复制并粘贴了管理聊天室创建的函数console.log(req.body.chatName);正确打印输入的名称

最佳答案

来自 Sequelize 文档:

// setting allowNull to false will add NOT NULL to the column, which means an error will be 
// thrown from the DB when the query is executed if the column is null

在您设置的聊天表中

name: { type: Sequelize.STRING, unique: true, allowNull: false,
    validate: {
        notNull: { args: true, msg: "You must enter a name" }
    },
    set: function(val) {
        val = val.toLowerCase().trim();
        this.setDataValue('title', val );
        this.setDataValue('slug', val.split(" ").join("_"));
    }
},

对于用户字段,其中allowNull 为false。

因此,您收到的错误直接来自数据库,而不是验证属性中的消息。去掉allowNull属性,保留验证,你应该就可以了。有点晚了,但希望这能解决问题!

关于validation - Sequelize 验证违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621448/

相关文章:

node.js - Jade 混合麻烦

sequelize.js - 在 Sequelize 中计算列的数据

mysql - Sequelize 错误 - lodash 没有方法 "template"

java - Spring JSR 303验证在编辑/添加时访问其他字段值

javascript - 使用 CoffeeScript 以编程方式检查复选框

java - Play 框架中的表单验证

javascript - 如何在对象属性中使用 JSDoc 中的 Enum 注释

php - Laravel 和 angularjs 表单验证

Node.js 请求库——将文本/xml 发布到正文?

javascript - Express 中的 Node.js 异步等待