Мы переходим с mySQL на MS SQL db и используем Sequelize в NodeJS в качестве API.
Проблемы начинаются при использовании метода .findOrCreate
.
При вызове конечной точки я ожидаю, что будет создана запись, которую я передаю в теле запроса, поскольку ее нет в базе данных. Поле ID в базе данных - pk и identity (0,1).
Sequelize пытается вставить в это поле, как я могу предотвратить это?
Это код в маршруте:
model.table1
.findOrCreate({
where: {
id: req.params.id
},
defaults: {
field1: req.body.field1,
field2: req.body.field2,
field3: req.body.field3
}
})
.spread((rowFound, created) => {
if (created) {
rowFound.get({ plain: true });
} else {
rowFound.update({
field1: req.body.field1,
field2: req.body.field2,
field3: req.body.field3
});
}
})
.then(result => {
res.json(result);
})
.catch(error => {
console.log('error', error);
res.status(500).send('Something went wrong');
});
Это модель:
module.exports = sequelize => {
const table1 = sequelize.define(
'table1',
{
field1: Sequelize.STRING(10),
field2: Sequelize.STRING(255),
field3: Sequelize.STRING(300),
id: { type: Sequelize.INTEGER, primaryKey: true },
},
{
schema: 'dbo',
tableName: 'table1',
hasTrigger: true
}
);
return table1;
};