Я разрабатываю приложение, используя Node.js и Express framework. Я нашел много примеров моделирования данных с использованием MongoDB, но для моего проекта требуется база данных SQL.
Может ли кто-нибудь сделать простое объяснение, что является лучшим способом создания моделей на основе MySQL?
Также мне интересно, как обеспечить более позднюю проверку этих моделей. Может быть, я должен определить атрибуты проверки внутри каждого из них?
Не существует лучшего способа создания моделей на основе MySQL. Вы можете реализовать свой собственный способ обработки моделей, но для Node.js доступно много модулей ORM, я бы предложил использовать один из них.
Я использую Sequelize как ORM для определения моделей и взаимодействия с базой данных в нескольких приложениях Express. Еще одна ORM для Node, с которой я столкнулся, - это Bookshelf.js, но есть много других. Какой из них использовать, зависит от ваших предпочтений и потребностей.
РЕДАКТИРОВАТЬ: Пример использования
Я предлагаю следующую структуру при использовании моделей Sequelize: каталог в вашем проекте с именем models с файлом для каждой модели и файл index.js для загрузки среды Sequelize. Если вы используете Sequelize CLI, у него также есть несколько методов, которые следуют этой структуре.
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 : "th1S1s@c0mpL3xP4sSw0rD",
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 их не поддерживает.