MySQLに基づいてモデルを作成する最良の方法はありません。モデルを処理する独自の方法を実装することもできますが、Node.jsで使用できるORMモジュールは多数あるため、そのうちの1つを使用することをお勧めします。
続編 を使用しています ORMとしてモデルを定義し、いくつかのExpressアプリケーションでデータベースと対話します。私が遭遇したノードのもう1つのORMは、Bookshelf.js です。 、しかし他にもたくさんあります。どちらを使用するかは、好みや必需品によって異なります。
編集:使用例
Sequelizeモデルを使用する場合は、次の構造をお勧めします。各モデルのファイルとSequelize環境をロードするためのindex.jsファイルを含むmodelsという名前のプロジェクト内のディレクトリ。 SequelizeCLI を使用する場合 、この構造に従ういくつかのメソッドもあります。
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;
};
その他のパラメータと詳細については、非常にシンプルで例と詳細が満載のSequelizeドキュメントを確認してください。
また、私はいくつかのECMAScript 6を使用したので、Node.jsのバージョンがそれらをサポートしていない場合は、このコードを変更またはトランスパイルします。