在单独的文件夹中分离续集模型并将它们连接在一起
Separate sequelize models in separate folders and join all together
我有一项复杂的任务要做。我需要将我的 sequelize 模型分离到 models 文件夹中的单独文件夹中,就像这样的结构:
├── node_modules
├── src
| └── models
| ├──settings
| | ├── user.js
| | └── location.js
| ├──stock
| | ├── stock.js
| | └── products.js
| └── index.js
今天,我将所有模型和 index.js 一起放在模型根文件夹中,这样我就可以从控制器调用每个模型
const { users, stock } = require("../../models")
index.js里面的代码是这样的:
"use strict"
const fs = require("fs")
const path = require("path")
const Sequelize = require("sequelize")
const basename = path.basename(__filename)
const env = process.env.NODE_ENV || "development"
const envConfigs = require("../config/config")
const config = envConfigs[env]
const db = {}
let sequelize
if (config.url) {
sequelize = new Sequelize(config.url, config)
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
}
fs.readdirSync(__dirname)
.filter((file) => {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
)
})
.forEach((file) => {
const model = require(path.join(__dirname, file))(
sequelize,
Sequelize.DataTypes
)
db[model.name] = model
})
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
db.sequelize = sequelize
module.exports = db
这是使用 sequelize-cli 自动创建的。
我认为我需要在 index.js 中进行一些搜索,并将文件夹和文件连接到 index.js 中的模型变量中,这样我就可以使用像“model.settings.user 这样的模型" 进行关联或调用控制器中的对象。
我终于让 index.js 正常工作了!这是任何需要它的代码(在 index.js 中有此代码,它将在所有文件夹中搜索并将所有模型名称文件放入 const "model"
"use strict"
const fs = require("fs")
const path = require("path")
const Sequelize = require("sequelize")
const basename = path.basename(__filename)
const env = process.env.NODE_ENV || "development"
const envConfigs = require("../config/config")
const config = envConfigs[env]
const db = {}
let sequelize
if (config.url) {
sequelize = new Sequelize(config.url, config)
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
}
const files = []
const sortDir = (maniDir) => {
const folders = []
const CheckFile = (filePath) => fs.statSync(filePath).isFile()
const sortPath = (dir) => {
fs.readdirSync(dir)
.filter((file) => file.indexOf(".") !== 0 && file !== "index.js")
.forEach((res) => {
const filePath = path.join(dir, res)
if (CheckFile(filePath)) {
files.push(filePath)
} else {
folders.push(filePath)
}
})
}
folders.push(maniDir)
let i = 0
do {
sortPath(folders[i])
i += 1
} while (i < folders.length)
}
sortDir(__dirname)
files.forEach((file) => {
const model = require(file)(sequelize, Sequelize.DataTypes)
db[model.name] = model
})
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
db.sequelize = sequelize
module.exports = db
我有一项复杂的任务要做。我需要将我的 sequelize 模型分离到 models 文件夹中的单独文件夹中,就像这样的结构:
├── node_modules
├── src
| └── models
| ├──settings
| | ├── user.js
| | └── location.js
| ├──stock
| | ├── stock.js
| | └── products.js
| └── index.js
今天,我将所有模型和 index.js 一起放在模型根文件夹中,这样我就可以从控制器调用每个模型
const { users, stock } = require("../../models")
index.js里面的代码是这样的:
"use strict"
const fs = require("fs")
const path = require("path")
const Sequelize = require("sequelize")
const basename = path.basename(__filename)
const env = process.env.NODE_ENV || "development"
const envConfigs = require("../config/config")
const config = envConfigs[env]
const db = {}
let sequelize
if (config.url) {
sequelize = new Sequelize(config.url, config)
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
}
fs.readdirSync(__dirname)
.filter((file) => {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
)
})
.forEach((file) => {
const model = require(path.join(__dirname, file))(
sequelize,
Sequelize.DataTypes
)
db[model.name] = model
})
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
db.sequelize = sequelize
module.exports = db
这是使用 sequelize-cli 自动创建的。
我认为我需要在 index.js 中进行一些搜索,并将文件夹和文件连接到 index.js 中的模型变量中,这样我就可以使用像“model.settings.user 这样的模型" 进行关联或调用控制器中的对象。
我终于让 index.js 正常工作了!这是任何需要它的代码(在 index.js 中有此代码,它将在所有文件夹中搜索并将所有模型名称文件放入 const "model"
"use strict"
const fs = require("fs")
const path = require("path")
const Sequelize = require("sequelize")
const basename = path.basename(__filename)
const env = process.env.NODE_ENV || "development"
const envConfigs = require("../config/config")
const config = envConfigs[env]
const db = {}
let sequelize
if (config.url) {
sequelize = new Sequelize(config.url, config)
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
}
const files = []
const sortDir = (maniDir) => {
const folders = []
const CheckFile = (filePath) => fs.statSync(filePath).isFile()
const sortPath = (dir) => {
fs.readdirSync(dir)
.filter((file) => file.indexOf(".") !== 0 && file !== "index.js")
.forEach((res) => {
const filePath = path.join(dir, res)
if (CheckFile(filePath)) {
files.push(filePath)
} else {
folders.push(filePath)
}
})
}
folders.push(maniDir)
let i = 0
do {
sortPath(folders[i])
i += 1
} while (i < folders.length)
}
sortDir(__dirname)
files.forEach((file) => {
const model = require(file)(sequelize, Sequelize.DataTypes)
db[model.name] = model
})
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
db.sequelize = sequelize
module.exports = db