Verwenden von sequelize.js mit express.js.Wie erstelle ich einen Ersetzungsvorgang mit sequelize.js?
Ich muss eine vorhandene Instanz eines Modells durch eine neue Instanz ersetzen. Ich möchte, dass die neue Instanz vor dem Speichern der Ersetzung validiert wird, um sicherzustellen, dass alle erforderlichen Felder vorhanden sind. Allerdings funktioniert validate()
nicht so, wie ich es erwarten würde. Im folgenden Beispiel fehlt req.body
requiedId
. Ich erstelle eine neue location
, setzen someAttribute
darauf von req.body
und rufen . Da requiredId
fehlt und das Modell es als allowNull: false
definiert hat, würde ich einen Validierungsfehler erwarten. Dies ist nicht der Fall, und das Update läuft glücklich.
sequelize.define('location', {
locationId: {
type: DataTypes.STRING,
allowNull: false,
primaryKey: true,
},
requiredId: {
type: DataTypes.INTEGER,
allowNull: false,
},
someAttribute: {
type: DataTypes.STRING,
defaultValue: 'baz'
});
var location;
models.location.findById(locationId)
.then(function (data) {
location = data;
var replacement = models.location.build({});
// req.body = { someAttribute: 'value' }
_.assign(replacement, req.body);
return replacement.validate()
.then(function() {
return location.update(replacement.toJSON());
});
}
})
.then(function() {
res.send('success');
})
.catch(function (err) {
res.status(400).send({ error:err });
});
Wenn ich manuell einen null
Wert für requiredId
hinzufügen, dann tritt der Fehler bei der Überprüfung, wie erwartet.
_.assign(replacement, req.body, { requiredId: null });
replacement.validate().catch(function (err) {
// now I hit it
})
Es scheint, dass, wenn ich eine neue Instanz eines Modells bin Gebäude, sequelize keine Felder nicht bestätigen, die nicht festgelegt worden sind.
Was ist der richtige Weg, um eine replace
Funktion in Sequelize zu implementieren? Die alte Instanz sollte durch ein neues Objekt ersetzt werden, das die erforderlichen Felder und entweder einen expliziten Wert oder den Standardwert für optionale Felder enthält.
var original = { locationId: 1, requiredId: 2, someAttribute: 'foo'};
var new = { locationId: 1, requiredId: 3};
models.location.replace(new);
// => { locationId: 1, requiredId: 3, someAttribute: 'baz' }