Ich erstelle eine RESTful-API mit NodeJS, Express, Express-Resource und Sequelize, mit der in einer MySQL-Datenbank gespeicherte Datasets verwaltet werden.
Ich versuche herauszufinden, wie ein Datensatz mithilfe von Sequelize ordnungsgemäß aktualisiert werden kann.
Ich erstelle ein Modell:
module.exports = function (sequelize, DataTypes) {
return sequelize.define('Locale', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
locale: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
len: 2
}
},
visible: {
type: DataTypes.BOOLEAN,
defaultValue: 1
}
})
}
Anschließend definiere ich in meinem Ressourcencontroller eine Aktualisierungsaktion.
Hier möchte ich in der Lage sein, den Datensatz zu aktualisieren, in dem die ID mit einer req.params
Variablen übereinstimmt.
Zuerst erstelle ich ein Modell und verwende dann die updateAttributes
Methode, um den Datensatz zu aktualisieren.
const Sequelize = require('sequelize')
const { dbconfig } = require('../config.js')
// Initialize database connection
const sequelize = new Sequelize(dbconfig.database, dbconfig.username, dbconfig.password)
// Locale model
const Locales = sequelize.import(__dirname + './models/Locale')
// Create schema if necessary
Locales.sync()
/**
* PUT /locale/:id
*/
exports.update = function (req, res) {
if (req.body.name) {
const loc = Locales.build()
loc.updateAttributes({
locale: req.body.name
})
.on('success', id => {
res.json({
success: true
}, 200)
})
.on('failure', error => {
throw new Error(error)
})
}
else
throw new Error('Data not provided')
}
Dies führt nicht zu einer Aktualisierungsabfrage, wie ich es erwarten würde.
Stattdessen wird eine Einfügeabfrage ausgeführt:
INSERT INTO `Locales`(`id`, `locale`, `createdAt`, `updatedAt`, `visible`)
VALUES ('1', 'us', '2011-11-16 05:26:09', '2011-11-16 05:26:15', 1)
Meine Frage lautet also: Wie kann ein Datensatz mit Sequelize ORM ordnungsgemäß aktualisiert werden?
.success
zu.then