【问题标题】:how to import modules that require arguments如何导入需要参数的模块
【发布时间】:2014-04-28 23:58:10
【问题描述】:

这是我的文件结构:

-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数据库.js。这是否意味着每当我需要在其他文件中使用 user.js 和 room.js 模块时,我必须连接到数据库并再次要求 Sequelize?有没有更好的方法来解决这个问题?谢谢!

【问题讨论】:

    标签: node.js express module sequelize.js


    【解决方案1】:

    你在这里有不同的可能性

    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. 将模型附加到初始化函数

      在 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
      

    【讨论】:

    • 您好,感谢您的回复。 #2 对我来说似乎是一个好方法,但 Sequelize 和 db 似乎没有被导出。它说 dbModule.Sequelize 未定义。
    • 如果您的 database.js 看起来与您的示例完全相同,则只需在主导出后附加新属性。在您的示例中,已经有一个 module.exports= 函数,因此您必须为其附加额外的导出
    • 附加是什么意思?
    • module.exports = function(){}; module.exports.Sequelize = 续集; module.exports.db = 数据库;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2018-01-22
    • 2018-08-25
    相关资源
    最近更新 更多