Không có cách tốt nhất để tạo mô hình dựa trên MySQL. Bạn có thể triển khai theo cách riêng của mình để xử lý các mô hình, nhưng có nhiều mô-đun ORM có sẵn cho Node.js, tôi khuyên bạn nên sử dụng một trong số đó.
Tôi sử dụng Sequelize dưới dạng ORM để xác định mô hình và tương tác với cơ sở dữ liệu trong một số ứng dụng Express. Một ORM khác cho Node mà tôi đã gặp là Bookshelf.js , nhưng có nhiều người khác. Chọn một cái để sử dụng tùy thuộc vào sở thích và nhu cầu của bạn.
CHỈNH SỬA:Ví dụ về cách sử dụng
Tôi đề xuất cấu trúc sau khi sử dụng mô hình Sequelize:một thư mục trong dự án của bạn có tên là các mô hình với một tệp cho mỗi mô hình và một tệp index.js để tải môi trường Sequelize. Nếu bạn sử dụng Sequelize CLI , nó cũng có một số phương thức tuân theo cấu trúc này.
index.js
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
let sqize = new Sequelize({
host : "1.2.3.4",
port : 1234,
database : "testDb",
username : "pino",
password : "[email protected]",
dialect: 'mysql',
});
fs.readdirSync(__dirname).filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
}).forEach(function(file) {
let model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.op = Sequelize.Op;
module.exports = {
sqize: sqize,
Sequelize: Sequelize,
op: Sequelize.Op
};
users.js
module.exports = function (sequelize, DataTypes) {
let users = sequelize.define('users', {
username: {
type: DataTypes.STRING(255),
allowNull: true
},
firstname: {
type: DataTypes.STRING(255),
allowNull: true
},
secondname: {
type: DataTypes.STRING(255),
allowNull: true
},
email: {
type: DataTypes.STRING(255),
allowNull: true
},
type: {
type: DataTypes.INTEGER(4),
allowNull: true,
references: {
model: 'users_type',
key: 'id'
}
},
password: {
type: DataTypes.STRING(255),
allowNull: true
},
salt: {
type: DataTypes.STRING(255),
allowNull: true
}
}, {
tableName: 'users'
});
users.associate = function (models) {
users.belongsTo(models.user_types, {
foreignKey: "type",
as: "userType"
});
users.hasMany(models.user_logs, {
foreignKey: "user_id",
as: "userLogs"
});
};
return users;
};
Để biết thêm thông số và chi tiết, bạn có thể kiểm tra tài liệu Sequelize, tài liệu này rất đơn giản và đầy đủ các ví dụ và chi tiết.
Ngoài ra, tôi đã sử dụng một số ECMAScript 6, vì vậy hãy thay đổi hoặc chuyển mã này nếu phiên bản Node.js của bạn không hỗ trợ chúng.