【发布时间】:2017-05-21 07:26:36
【问题描述】:
这可能是一个有点愚蠢的问题,但如果我有 2 个 API 端点和一个基本的 Sequelize 模型,如下所示:
var User = storage.database.define('user', {
email: {
type: sql.STRING,
validate: {
isEmail: true,
},
},
data: sql.JSON,
}, {
freezeTableName: true,
timestamps: true,
hooks: {
beforeUpdate: user => {
user.set('data', user.data)
},
},
})
function getUser(email) {
return User.findOne({
where: { email },
}).then(function(user) {
if (!user) {
throw {error: 'Unknown User'}
}
return user
})
}
api.get('/one/:email', function(req, res, next) {
getUser(req.params.email)
.then(user => {
user.data.someField = 1234;
setTimeout(() => {
user.save()
}, 1000)
res.send('one')
})
})
api.get('/two/:email', function(req, res, next) {
getUser(req.params.email)
.then(user => {
// update a different data field and/or the same field as in `one`
user.data = { otherField: 'updated it', someField: 9999 };
user.save()
res.send('two')
})
})
如果同一个用户发送 2 个请求(每个请求一个)会发生什么?一个会覆盖另一个吗?如果是这样,如果在two 中我没有设置someField 而只是更改otherField 并保存它会发生什么。 one中的数据会丢失吗?
如果数据被覆盖,在不覆盖其他请求中发送的数据的情况下,使用 Sequelize Instances 和更新字段(例如 data)的推荐方法是什么?
【问题讨论】:
-
我想这取决于数据库如何处理对 JSON 数据的更改,但我认为自己测试会相对容易(或检查并查看 Sequelize 为每种更新类型运行哪些查询)。
标签: javascript node.js express sequelize.js