这是我的文件结构:
-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?有没有更好的方法来解决这个问题?谢谢!
答案 0 :(得分:1)
你在这里有不同的可能性
转口模式:
数据库中的<。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