在`require(controller)(app)`中`(app)`的目的是什么?

时间:2015-07-23 20:02:55

标签: node.js express

我是节点的新手,等等等等。

我正在查看我找到的一些代码,并遇到了行

var app = express();
var glob = require('glob');

var controllers = glob.sync(config.root + '/app/controllers/*.js');
    controllers.forEach(function (controller) {
    require(controller)(app);
});

我知道这会得到/app/controllers/中以.js结尾的每个文件的所有文件名,并将它们粘贴在一个数组中,然后遍历每个文件并在其上调用require。有道理,看起来像一个不要求每个人单独的好方法。我的问题是最后(app)的问题是什么?我尝试查看节点文档,但没有require()()函数。编辑(app)使代码正常工作,没有错误,但不加载控制器。如果我不得不猜测,它是否会被找到的控制器“倍增”应用程序?为什么app.require(controller)不适合?

提前致谢

2 个答案:

答案 0 :(得分:1)

据我估计,我们将:

/* some-controller-file.js */
module.exports = function (app) {
    /* do things with `app` */
}

因此,这允许您在控制器内部使用创建的app,这样您就可以附加路径。

答案 1 :(得分:1)

require是节点的一部分,是模块的加载方式。当您编辑(app)时,它可能仍在加载控制器,但由于您还没有将app对象传递给每个控制器,它们会无声地失败或返回一个没有&#的控制器对象39;工作。

因此控制器中的某些东西(可能是正在创建的路径或其他类似的东西)需要知道app对象,并且必须将其传递到控制器,因为app不是{\ n}}在全球范围内。您可能希望查看moduleglobals的节点文档,因为这些文档可能会清除WAY而不仅仅是这一个问题。