Er is geen beste manier om modellen te maken op basis van MySQL. Je zou je eigen manier kunnen implementeren om met modellen om te gaan, maar er zijn veel ORM-modules beschikbaar voor Node.js, ik raad aan om er een te gebruiken.
Ik gebruik Sequelize als ORM om modellen te definiëren en interactie aan te gaan met de database in verschillende Express-toepassingen. Een andere ORM voor Node die ik ben tegengekomen is Bookshelf.js , maar er zijn er nog veel meer. Welke je moet gebruiken, hangt af van je voorkeuren en behoeften.
EDIT:gebruiksvoorbeeld
Ik stel de volgende structuur voor bij het gebruik van Sequelize-modellen:een map in uw project met de naam modellen met een bestand voor elk model en een index.js-bestand om de Sequelize-omgeving te laden. Als u de Sequelize CLI gebruikt , het heeft ook verschillende methoden die deze structuur volgen.
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;
};
Voor meer parameters en details kun je het Sequelize-document raadplegen, dat heel eenvoudig is en vol voorbeelden en details staat.
Ik heb ook wat ECMAScript 6 gebruikt, dus wijzig of transpileer deze code als uw versie van Node.js ze niet ondersteunt.