2015-12-21 52 views
0

我的节点服务器上有两个需要彼此的js文件。 都具有通过module.exports机制暴露的对象。对象似乎无法加载其所有属性。 - Node.js

一号文件位于bl/commands.js下及用途:

var smUtil = require('./../utils/smUtil'); 

第二个文件位于utils/smUtil.js下及用途:

var commands = require('./../bl/commands'); 

当一个函数从smUtil.js运行,并使用commands.js某些属性似乎像command是一个空对象,导入不成功。

这里是收集,当我删除smUtil形式的requirecommands.js一切正常,这让我觉得我做了newbe错误。

有什么想法?

+0

我发现这篇文章: https://coderwall.com/p/myzvmg/circular -dependencies-in-node-js – TBE

回答

1

Node.js documentation about circular dependencies

你是绝对正确的,返回空的对象。

要询价Node.js的文档

当main.js负荷a.js,然后依次加载b.js. a.js那时,b.js会尝试加载a.js.为了防止无限循环,将a.js exports对象的未完成副本返回给b.js模块。然后b.js完成加载,并将其导出对象提供给a.js模块。

一个解决方案是创建一个单独的文件,要求两个文件存在和实例化文件,以避免循环依赖。

+0

upvoted :),我打算发布一个解决我的问题的答案,如果你能解释一些关于我的解决方案以及为什么我的解决方案不是最好的解决方案,那将是非常好的。 – TBE

0

解决我的问题的具体解决方案是将var smUtil = require('./../utils/smUtil');放在下方commands.js的内部。

但是我觉得这个解决方案不是那里最好的解决方案。

由于笔者: coderwall.com/p/myzvmg/circular-dependencies-in-node-js