如何导入需要参数的模块

这是我的文件结构:

-models -user.js -room.js -database.js -controllers -createRoom.js -routes.js .. 

user.js和room.js是我想要在database.js中导入的模块。 现在我正在做这样的事情:

在database.js中:

 var mysql = require('mysql'); var Sequelize = require('sequelize'); var db = new Sequelize('test', 'root', 'root', { dialect: "mysql", port: 3306 }) var User = require('./user.js')(Sequelize, db); var Room = require('./room.js')(Sequelize, db); module.exports = function(){ //code... }; 

在user.js / room.js中

 module.exports = function (Sequelize, db) { var Room = db.define('Room', { room_id : {type: Sequelize.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true}, }) db .sync({force: true}) .complete(function (err) {}) 

到目前为止这么好,但是当我需要导入user.js或room.js除了database.js(例如,createRoom.js)之外的其他文件,我有麻烦导入他们,因为没有Sequelize和数据库定义像数据库中。 JS。 这是否意味着我必须连接到数据库,并需要再次sequelize每当我需要在其他文件中使用user.js和room.js模块? 有没有更好的方法来解决这个问题? 谢谢!

你在这里有不同的可能性

  1. 转口模式:

    在你的database.js

     //init code as seen module.exports.Room = Room 

    导入别的地方

     require('../models/database').Room 
  2. 使你的database.js依赖

    在database.js中

      module.export = { Sequelize: Sequelize, db : db} 

    在room.js

      var dbModule = require('./database') module.exports = dbModule.Sequelize.define('Room', /*....*/) 
  3. 将模型附加到init函数

    在room.js

     module.exports = roomInit function roomInit(Sequelize, db) { roomInit.Room = db.define('Room', { room_id : {type: Sequelize.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true} }) db .sync({force: true}) .complete(function (err) {}) } 

    用法

      require('./room').Room