打破单独的文件夹中的后续模型

我真正的问题是:是否有可能与单独的文件夹中的模型sequelize工作?

我这样问,因为我试图在我的应用程序中使用模块化结构,为了实现我需要的模型,控制器和path在同一个文件夹中,这就是我的意思:

├── node_modules ├── src │ ├── client │ │ └── ... //Frontend things managed by angular (like views, etc...) │ └── server | ├── components | | ├── db | | | ├── migrations | | | | ├── users.js | | | | └── ... | | | ├── seeders | | | ├── config.json | | | ├── options.json | | | └── index.js | | ├── env | | └── ... │ ├── modules //By module i mean an entity | | ├── users | | | ├── users.model.js | | | ├── users.controller.js | | | └── index.js //Here i define the routes | | └── ... | └── ... | ├── package.json └── server.js 

我怎么能这样做? 我怎么能把模型分割成单独的文件夹?

也许我所要求的是:我怎样才能configurationmodels / index.js脚本从每个目录中读取模型?

车型/ index.js

 'use strict'; var fs = require('fs'); var path = require('path'); var Sequelize = require('sequelize'); var basename = path.basename(module.filename); var env = process.env.NODE_ENV || 'development'; var config = require(__dirname + '/../config.json')[env]; var db = {}; if (config.use_env_variable) { var sequelize = new Sequelize(process.env[config.use_env_variable]); } else { var sequelize = new Sequelize(config.database, config.username, config.password, config); } fs .readdirSync(__dirname) .filter(function(file) { return (file.indexOf('.') !== 0) && (file !== basename); }) .forEach(function(file) { if (file.slice(-3) !== '.js') return; var model = sequelize['import'](path.join(__dirname, file)); db[model.name] = model; }); Object.keys(db).forEach(function(modelName) { if (db[modelName].associate) { db[modelName].associate(db); } }); db.sequelize = sequelize; db.Sequelize = Sequelize; module.exports = db; 

我在想的是在模块目录的每个文件夹下查找xxx.model.js ,其结构如下:

 modules ├── index.js //The above script configured to read the x.model.js in each folder ├── users | ├── users.model.js | ├── users.controller.js | └── ... ├── questions | ├── questions.model.js | ├── questions.controller.js | └── ... └── ... 

注:我来自一个Laravel背景,我猜如何迁徙和模型不同在sequelize,因为当你定义一个模型,你告诉列的types等等,就像迁移一样…

您必须读取您的给定目录中存在的不同文件夹中的所有模型。

让我们将sortDir函数添加到models / index.js中

sortDir会将我们目录中每个文件夹中存在的所有js文件sorting成一个名为files的数组。 调用函数后,我们可以轻松地从文件数组中读取我们的模型。

 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); 

现在,您可以从数组文件中sorting后读取每个模型。

 files .forEach((file) => { const model = sequelize.import(file); db[model.name] = model; }); 

希望能帮助到你!

无论你喜欢什么,都可以使用节点模块glob定制文件夹