双括号在要求中意味着什么

时间:2014-06-04 18:33:47

标签: node.js express

我知道这个需要声明的作用。

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

但有时我会在要求后看到两个括号。

var routes = require('./routes')(app);

Q)这是什么意思,它是如何运作的?

3 个答案:

答案 0 :(得分:22)

这是一种模式,其中您需要的模块的module.exports被设置为一个函数。 Requiring该模块返回一个函数,并且require之后的括号用参数计算函数。

在上面的示例中,您的./routes/index.js文件类似于以下内容:

module.exports = function(app) {
  app.get('/', function(req, res) {

  });
  // ...
};

此模式通常用于将变量传递给模块,如上面的app变量所示。

答案 1 :(得分:8)

嗯,require是Node.js提供的一个函数,它基本上为你加载一个模块,它返回你在你加载的模块中公开的内容。

如果您在给定模块中公开(通过使用module.exports)是一个函数,那么这就是需要返回的东西。例如。

//moduleX.js
module.exports = function(){
  return "Helo World";
}

然后,如果你需要它,你会得到一个功能

var f = require('./moduleX');
console.log(f()); //hello world

当然,您可以在需要时直接调用该函数。

var greet = require('./moduleX')();
console.log(greet);

答案 2 :(得分:2)

这意味着在后面,有一个使用module.exports导出的函数:

module.exports = function(app) {
   app.get("/", function(req, res){});
}

另见http://www.choskim.me/understanding-module-exports-and-exports-in-node-js/

旁注:

你可以动态创建功能:

A.js

module.exports = function(data) {
   return function(req, res, next) {
        // Do something with data
        next();

}

main.js

...
app.use(require("A")(data));
...