【发布时间】:2019-09-08 06:06:01
【问题描述】:
我有一个接受 RESTful 样式请求的服务器。对于某类对象的 PUT,我想插入一条带有请求正文数据的新记录,或者更新以前的记录。为此,我正在使用 Sequelize upsert。
app.put('/someModel/:id', (req, res, next) => {
const data = JSON.parse(JSON.stringify(req.body));
data.id = req.params.id;
models.SomeModel.upsert(data).then(() => {
return models.SomeModel.findByPk(req.params.id);
}).then(res.send.bind(res)).catch(next);
});
更新时,我只想更新以前没有更改过的数据库记录。也就是说,如果客户端 A 获取一条记录,然后客户端 B 修改该记录,然后客户端 A 随后尝试更新它,则请求应该失败,因为客户端 B 在客户端 A 的获取和更新之间更新了记录。 (在 HTTP 端,我使用的是 If-Unmodified-Since 请求标头。)
基本上,我需要一种方法:
UPDATE table
SET
field1="value1",
field2="value2"
WHERE
id=1234 AND
updatedAt="2019-04-16 17:41:10";
这样,如果记录之前已经更新过,这个查询不会修改数据。
如何使用 Sequelize upsert 生成这样的 SQL?
【问题讨论】:
标签: node.js sequelize.js