0
これは愚かな質問のビットであるが、私は2つのAPIエンドポイントとそのような基本的なSequelizeモデルがある場合があります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を送信した場合どうなりますかリクエスト(それぞれに1つ)? 1つは他を上書きするでしょうか?もしそうなら、two
にはsomeField
を設定せず、その代わりにotherField
を変更して保存してください。 one
に設定されたデータは失われますか?
データがオーバーライドされている場合、他のリクエストで送信されたデータを上書きせずに、data
などのフィールドを更新してSequelizeインスタンスで処理することをお勧めしますか?
私は、これはデータベースはJSONデータへの変更をどのように扱うかに依存推測するが、私はそれがだと思います自分自身をテストするのが比較的簡単である(または、Sequelizeが各タイプのアップデートに対して実行されるクエリを確認して確認する)。 – robertklep