Dies könnte ein bisschen eine dumme Frage, aber wenn ich 2 API-Endpunkte haben und ein Grund Sequelize Modell wie folgt:Sequelize Instanz Methode save() Gleichzeitigkeit Verhalten
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')
})
})
Was passiert, wenn der gleiche Benutzer sendet 2 Anfragen (eins zu jedem)? Überschreibt der eine den anderen? Wenn ja, was passiert, wenn ich in two
someField
nicht setze und stattdessen einfach die otherField
ändern und speichern. Wird der Datensatz one
verloren gehen?
Wenn Daten überschrieben werden, wie wird empfohlen, mit Sequelize-Instanzen zu arbeiten und Felder wie data
zu aktualisieren, ohne die in anderen Anforderungen gesendeten Daten zu überschreiben?
Ich denke, das hängt davon ab, wie die Datenbank behandelt Änderungen JSON-Daten, aber ich denke, es wäre Es ist relativ einfach, sich selbst zu testen (oder zu überprüfen, welche Abfragen Sequelize für jeden Aktualisierungstyp ausführt). – robertklep