Express 列不存在时使用Sequelize处理数据库错误';不存在?
我试图处理在插入MYSQL数据库时可能出现的不同错误 将Sequelize与express一起使用 我的foo.js模型文件如下所示: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:
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
嗯