gpt4 book ai didi

javascript - Sequelize 和 Node.js : Issue with Module. 导出和表模型

转载 作者:行者123 更新时间:2023-11-28 23:18:37 25 4
gpt4 key购买 nike

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

当我运行 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。我确实在 models/Table1.js 中检查了 db 的控制台输出,它是空的,因此在该模型中未访问其清晰的 module.exports = db

有人可以提供更正此问题的解决方案吗?

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

模型/Table1.js

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

服务器.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< 之间创建了循环依赖 因为在 Table1.js 模型中你需要 index.js 文件并且在你执行的 index.js 文件中sequelize.import() 调用执行 require(path) 以包含模型定义,因此在您的情况下它调用 require('./Table1.js' ) - 出现了循环依赖。

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

看看这个问题 - How to deal with cyclic dependencies in Node.js了解如何处理这种情况。

编辑

根据您的评论,让我们考虑具有以下结构的简单示例

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

script.js

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

如果您需要 script.js 放在 models 目录中的任何文件中,则可以这样做。

关于javascript - Sequelize 和 Node.js : Issue with Module. 导出和表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com