मैं NodeJS, एक्सप्रेस, एक्सप्रेस-संसाधन, और Sequelize के साथ RESTful API बना रहा हूं जिसका उपयोग MySQL डेटाबेस में संग्रहीत डेटासेट को प्रबंधित करने के लिए किया जाता है।
मैं यह पता लगाने की कोशिश कर रहा हूं कि सीक्लाइज़ का उपयोग करके रिकॉर्ड को ठीक से कैसे अपडेट किया जाए।
मैं एक मॉडल बनाता हूं:
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
}
})
}
फिर, मेरे संसाधन नियंत्रक में, मैं एक अद्यतन कार्रवाई परिभाषित करता हूं।
यहाँ में मैं उस रिकॉर्ड को अपडेट करने में सक्षम होना चाहता हूँ जहाँ आईडी मैच करती है req.params
वैरिएबल से ।
पहले मैं एक मॉडल बनाता हूं और फिर मैं updateAttributes
रिकॉर्ड को अपडेट करने के लिए विधि का उपयोग करता हूं ।
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')
}
अब, यह वास्तव में अपडेट क्वेरी का उत्पादन नहीं करता है जैसा कि मैं अपेक्षा करता हूं।
इसके बजाय, एक सम्मिलित क्वेरी निष्पादित की जाती है:
INSERT INTO `Locales`(`id`, `locale`, `createdAt`, `updatedAt`, `visible`)
VALUES ('1', 'us', '2011-11-16 05:26:09', '2011-11-16 05:26:15', 1)
तो मेरा सवाल है: सीक्वेलाइज़ ओआरएम का उपयोग करके रिकॉर्ड को अपडेट करने का उचित तरीका क्या है?
.success
करने के लिए.then