了解NodeJS的exports / require

时间:2013-07-27 22:46:03

标签: node.js

我正在使用node.js exports和require。以默认快递应用为例:

在app.js代码的底部,有一些如下所示:app.get('/', routes.index);这意味着我可以指定更多路由,如下所示:

app.get('/login', routes.login);
app.get('/logout', routes.logout);

等。为了更好地理解export / require事物,我试图将它们放在一个单独的文件中。我这样试试:

//app.js
var gets = require('./gets'),
exports.foo = app;

//gets.js
var app = require('./app');
console.log(app); //returns empty obj {}

为什么?你能帮我理解我做错了什么吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

当两个模块都需要彼此时,这就是所谓的circular dependency(节点文档称之为"循环")。它几乎总是你可以而且应该避免的设计选择。节点必须首先加载一个模块,因此第二个模块由于这个循环依赖性边缘情况而最终得到一个空对象。解决方案是不要gets.js require app.js,只需app.js require gets.js

//app.js
var app = require('express')();
var gets = require('./gets');
gets.setup(app);

然后

//gets.js
function setup (app) {
    app.get('/blah', myHandler);
}
exports.setup = setup;