Sequelize和Node.js:Module.Exports和表模型的问题

我正在一台服务器上安装多个数据库。 要开始这个过程,我要在index.js导出对象中分配一个数据库,这样我可以在构build系统时添加另一个数据库。 以下是该问题的描述。

当我运行server.js文件时,数据库db1的.sync函数同步Table1和Table2,然后开始监听其端口。 它明确的server.js文件正在通过var db = require('./models')接收module.exports = db 。 然而在文件models / Table1.js中 ,服务器抛出一个错误TypeError: Cannot read property 'Table1' of undefined 。 我没有在模型/ Table1.js中检查数据库的控制台输出,它是空的,所以它清晰的module.exports = db在这个模型中没有被访问。

有人可以提供解决scheme来纠正这个问题吗?

Table1.js模型和上面列出的其他文件的部分代码如下:

车型/ Table1.js

 var db = require('./.') [...] var new_instance = db.db1.Table1.build({...}) 

server.js

 var db = `require('./models')` [...] db.db1.sync(function(err) {}); 

车型/ index.js

 var sq = new Sequelize(dbname, user, password, config); db['db1'] = { Sequelize: Sequelize, sequelize: sq, Table1: sq.import(__dirname + '/...'), Table2: sq.import(__dirname + '/...') } module.exports = db; 

module.exports = db正在被访问,但是你已经在models/index.jsmodels/Table1.js之间创build了循环依赖关系,因为在Table1.js模型中你需要index.js文件,而在index.js文件,你执行sequelize.import()调用,执行require(path)来包含模型定义,所以在你的情况下调用require('./Table1.js') – 循环依赖。

您应该考虑将var new_instance = db.db1.Table1.build({...})放在其他地方,以避免这种情况。 模型定义的文件只能用于创build模型定义,尽量避免执行额外的操作。

看看这个问题 – 如何处理Node.js中的循环依赖关系,以了解如何处理这种情况。

编辑

根据你的评论让我们考虑一下简单的例子,下面的结构

 - script.js - models - index.js - Table1.js 

script.js

 var db = require('./models'); var new_instance = db.db1.Table1.build({...}); 

如果你不需要放在models目录下的任何文件里面的script.js ,可以这样做。