0

我正在玩 node.js 导出和要求。以默认的快递应用为例:

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

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

等等。为了更好地理解导出/需要的东西,我试图把它们放在一个单独的文件中。我正在尝试这样:

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

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

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

4

1 回答 1

1

当两个模块都相互需要时,这就是所谓的循环依赖(节点文档称其为“循环”)。它几乎总是您可以而且应该避免的设计选择。节点必须首先加载一个模块,因此由于这种循环依赖边缘情况,第二个模块最终会得到一个空对象。解决办法是不要做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;
于 2013-07-28T00:51:43.737 回答