Взгляните на определение models / blog.js в этом Продолжить учебник.
module.exports = (sequelize, type) => {
return sequelize.define('blog', {
id: {
type: type.INTEGER,
primaryKey: true,
autoIncrement: true
},
text: type.STRING
})
}
Он называется так:
const BlogModel = require('./models/blog');
const sequelize = new Sequelize('codementor', 'root', 'root', {...});
const Blog = BlogModel(sequelize, Sequelize);
Я просмотрел еще много примеров Sequelize и обнаружил "шаблон" Модель (продолжение, продолжение), вероятно, по крайней мере, в 90% из них. Как будто все они прямо или косвенно происходят из какого-то действительно плохого примера кода, потому что ...
Мне это кажется ужасным. Есть две переменные, которые различаются только регистром. Одна из них - это библиотека Sequelize, другая - что-то вроде сеанса или соединения (не знаю, какой термин используется в Sequelize). Я считаю, что наличие переменных в верхнем регистре является нарушением правил кодирования. Затем ссылка на библиотеку передается в другой файл, в котором нет необходимости в Node, поскольку модули требует кэшируются при первой загрузке. Так почему бы просто не сослаться на Sequelize напрямую в файлах модели и передать только объект продолжение?
Кто-нибудь видит веские причины для этого? Более чистый способ IMO сделать это описан в этом SO сообщение. Престижность ответчику. Мне просто интересно, не упускает ли я здесь что-то очевидное, что я действительно должен делаю это таким образом, или я могу написать более чистый код?






Это действительно уродливо. Что я делаю, так это создаю базу данных в собственном файле и экспортирую ее.
const db = new Sequelize(
process.env.DATABASE_URL || `postgres://localhost:5432/${databaseName}`,
)
module.exports = db
Я импортирую его в файл blog.js и сделаю примерно так:
const Sequelize = require('sequelize')
const db = require('../db')
const blog = db.define('blog', {
your_field_name_here: {
type: your_sequelize_type_here
},
... and so on
})
module.exports = blog
Не совсем уверен, почему они делают это таким образом, но я считаю, что определение моделей таким образом намного проще, и он должен достичь того, чего вы пытаетесь достичь. В Sequelize есть некоторые устаревшие вещи, поэтому меня не удивит, если так было раньше.