如何导入需要参数的模块

时间:2014-04-25 04:40:58

标签: node.js express module sequelize.js

这是我的文件结构:

-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) {})

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

1 个答案:

答案 0 :(得分:1)

你在这里有不同的可能性

  1. 转口模式:

    数据库中的

    <。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