【发布时间】:2020-01-25 01:20:45
【问题描述】:
我正在尝试处理插入 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 错误行为。
有人能指出我所缺少的正确方向吗?
【问题讨论】:
标签: express sequelize.js