【发布时间】:2016-02-20 14:54:11
【问题描述】:
我正在尝试在 Sequelize 中使用 upsert 方法,但得到的布尔返回值不一致。尽管数据在数据库中更新,但似乎 updatedData 参数总是错误的。这是我的代码:
router.post('/deploy', function (req, res) {
var data;
data = req.body;
//Update data in mySQL
db.site.upsert({
name: data.name,
templateId: data.templateId,
siteName: data.siteName,
domain: utils.formatDomain(data.domain),
mainEmail: data.mainEmail,
mainPhone: utils.removePhoneNumberFormat(data.mainPhone),
mainExt: ''
}, {
where: {
domain: data.domain
},
}).then(function (updatedData) {
console.log(updatedData);
if (updatedData) {
console.log('New data written successfully');
return res.status(200).send('New data written');
} else {
console.log('Data did not change from the origin');
return res.status(200).send('Nothing changed');
}
}).catch(function (e) {
console.log('Deploy Controller Error: s% ', e);
return res.status(500).end('unexpected_error');
});
});
我确定我在这里做错了,但任何帮助或反馈将不胜感激。谢谢,我希望你今天过得愉快。 :)
【问题讨论】:
-
我试图对此进行复制(这里:github.com/cfogelberg/sequelize-playground/tree/master/tests/…),但我发现 upsert 总是返回 true。我对此进行了一些研究,这似乎是因为 rowCount 始终为 1(相关来源:github.com/sequelize/sequelize/blob/…)。这是使用 MySQL 版本 5.5.46、node-mysql 版本 2.9.0 和 sequelize 3.13.0。你用的是什么版本的DB、node-mysql和sequelize?
-
谢谢@cfogelberg。我正在使用节点 v4.2.1、MySql v5.6.27 和 Sequelize v3.3.2。作为解决方法,我有哪些类型的选择?我是 Sequelize 的新手。再次感谢!
-
再调查一下,恐怕我无法使用 Sequelize 3.3.2、3.13.0 或 3.14.0 重现 updatedData === false。如果无论如何发布一些解决方法会有所帮助,请告诉我,我会将它们记下来作为这个问题的正确答案。
-
@cfogelberg 我认为这会有所帮助,如果您不介意的话。谢谢!