如何导入需要参数的模块
这是我的文件结构:
-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模块? 有没有更好的方法来解决这个问题? 谢谢!
你在这里有不同的可能性
-
转口模式:
在你的database.js
//init code as seen module.exports.Room = Room
导入别的地方
require('../models/database').Room
-
使你的database.js依赖
在database.js中
module.export = { Sequelize: Sequelize, db : db}
在room.js
var dbModule = require('./database') module.exports = dbModule.Sequelize.define('Room', /*....*/)
-
将模型附加到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