Express 列不存在时使用Sequelize处理数据库错误';不存在?

Express 列不存在时使用Sequelize处理数据库错误';不存在?,express,sequelize.js,Express,Sequelize.js,我试图处理在插入MYSQL数据库时可能出现的不同错误 将Sequelize与express一起使用 我的foo.js模型文件如下所示: module.exports = (sequelize, type) => { return sequelize.define('event', { id: { type: type.INTEGER, primaryKey: true, autoIncrement: true }, name:

我试图处理在插入MYSQL数据库时可能出现的不同错误

将Sequelize与express一起使用

我的foo.js模型文件如下所示:

module.exports = (sequelize, type) => {
  return sequelize.define('event', {
    id: {
      type: type.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      type: type.STRING,
      }
  },{
    freezeTableName: true,
    rejectOnEmpty: true,
  })
}
我的路由文件(或者随便你怎么称呼它)是这样的

const Sequelize = require('sequelize')
const fooModel = require('../../models/Foo')
const router = require('express').Router();
const auth = require('../auth');
const bodyParser = require('body-parser');
const sequelize = new Sequelize('username', 'password', 'db', {
      host: 'localhost',
      dialect: 'mysql'
})

const Foo = fooModel(sequelize, Sequelize);
router.use(bodyParser.json({limit: '100mb'}));
router.use(bodyParser.urlencoded({ extended: true, limit: '100mb', parameterLimit: 1000000 }));


sequelize.sync({force: true})
.then(() => {
      console.log('Worked');
});

router.post('/', (req,res,next) => {
      if(Object.keys(req.body).length > 0){ 
            return Foo.create({
                  Name: req.body.Name
            }).then((result) => {
                  if(result){
                        return res.status(200).json(result);
                  }else{
                        return res.status(400).json({'error': 'Could not create record.'});
                  }
            }).catch(Sequelize.DatabaseError, function(err){
                return res.status(400).json(err);
            }).catch(function(err){
                res.send(err);
            })
      }else{
            return res.status(400).json({'error': 'error'});
      }
});

module.exports = router;

每当我尝试使用以下内容发布到路线时:

{
  "name": "test",
  "foo": "bar"
}
Sequelize接受主体并将“test”放在“name”列中,并忽略“foo”列,因为“foo”列不存在。意思是,一旦发布,我得到的回报是:

{"id": "123",
createdAt: 2020-01-23 13:337:00
updatedAt: 2020-01-23 13:337:00
}
并不像我预料的那样是个错误

我想做的是,每当我试图发布到一个不存在的列时,捕捉那个错误(我今天没有收到),基本上复制一个正常的MYSQL错误行为


有人能给我指出我所缺少的东西的正确方向吗?

根据我的经验,最好通过验证客户端的字段来避免这个特殊问题

但是,您可以在js中捕获这样的条件。您不会得到DB异常,因为Sequelize不会将无法识别的属性发送到数据库

if (!Foo.attributes.hasOwnProperty('foo')) { 
   // some error handing here, for invalid field.
}
您可以编写一个实用函数来迭代
req.body
的属性,并向响应发送适当的错误

FWIW,您会发现
Name
也是无效的,因为您的模型指定了(小写)
Name