Tôi đang tạo một API RESTful với NodeJS, express, express-resource và Sequelize được sử dụng để quản lý các tập dữ liệu được lưu trữ trong cơ sở dữ liệu MySQL.
Tôi đang cố gắng tìm ra cách cập nhật bản ghi đúng cách bằng cách sử dụng Sequelize.
Tôi tạo một mô hình:
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
}
})
}
Sau đó, trong bộ điều khiển tài nguyên của mình, tôi xác định một hành động cập nhật.
Ở đây, tôi muốn có thể cập nhật bản ghi mà id khớp với một req.params
biến.
Đầu tiên tôi xây dựng một mô hình và sau đó tôi sử dụng updateAttributes
phương pháp để cập nhật bản ghi.
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')
}
Bây giờ, điều này thực sự không tạo ra một truy vấn cập nhật như tôi mong đợi.
Thay vào đó, một truy vấn chèn được thực thi:
INSERT INTO `Locales`(`id`, `locale`, `createdAt`, `updatedAt`, `visible`)
VALUES ('1', 'us', '2011-11-16 05:26:09', '2011-11-16 05:26:15', 1)
Vì vậy, câu hỏi của tôi là: Cách thích hợp để cập nhật một bản ghi bằng cách sử dụng Sequelize ORM là gì?
.success
để.then