node.js中的require(path)和require(path)()之间有什么区别

时间:2015-10-15 05:27:00

标签: node.js mean-stack

在node.js项目中,我看到了require(path)以及require(path)()额外的paranthasis所引用的内容。 我什么时候应该使用require(path)和require(path)()

1 个答案:

答案 0 :(得分:1)

require()语句从正在加载的模块中返回module.exports属性。你用它做什么完全取决于模块设置的内容。

如果模块将其设置为某种函数(通常称为模块构造函数),那么用var something = require('xxx')(...);

调用它是很自然的

但是,如果模块只是导出一个带有属性的对象,那么尝试调用它实际上是一个编程错误。

因此,它完全取决于您要加载的模块正在导出。

例如,在加载文件系统模块时,它只是:

var fs = require('fs');

在这种情况下,变量fs只是一个对象(不是函数)所以你不会调用它 - 你只需引用它上面的属性:

fs.rename(...)

以下是导出构造函数的模块示例,您可以在其后调用()

// myRoutes.js
module.exports = function(app) {
    app.get("/", function() {...});
    app.get("/login", function() {...});
}

// app.js

// other code that sets up the app object
// ....

// load a set of routes and pass the app object to the constructor
require('./myRoutes')(app);

并且,这是一个模块的示例,只是导出属性,因此您不会调用模块本身:

// myRoutes.js
module.exports.init = function(app) {
    app.get("/", function() {...});
    app.get("/login", function() {...});
}

// export commonly used helper function
module.exports.checkPath = function(path) {
    // ....
}

// app.js

// other code that sets up the app object
// ....

// load a set of routes and then initialize the routes
var routeStuff = require('./myRoutes');
routeStuff.init(app);


if (routeStuff.checkPath(somePath)) {
    // ...
}