Я пытаюсь обработать различные ошибки, которые могут появляться при вставке в базу данных 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 ошибочное поведение.
Может ли кто-нибудь указать мне правильное направление на то, что я пропускаю?