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

我知道这个要求声明做什么。

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

但是有时候我还看过要求后的两个括号。

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

问)这是什么意思,它是如何工作的?

这是模块的module.exports被设置为一个函数的模式。 要求该模块返回一个函数,在require之后的括号用一个参数来计算函数。

在上面的示例中,您的./routes/index.js文件如下所示:

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

这个模式通常用于将variables传递给模块,就像上面用appvariables所看到的那样。

好吧, 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); 

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

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

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

边注:

您可以在飞行中创buildfunction:

A.js

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

main.js

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