0
這可能是一個有點愚蠢的問題,但如果我有2個API端點和基本Sequelize模型像這樣:Sequelize實例方法Save()併發行爲
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實例和更新字段(如data
)的推薦方式是什麼,而不會覆蓋其他請求中發送的數據?
我想這取決於數據庫如何處理變化的JSON數據,但我認爲它會比較容易測試自己(或者檢查並查看Sequelize針對每種更新類型運行的查詢)。 – robertklep