双括号在要求中意味着什么
我知道这个要求声明做什么。
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传递给模块,就像上面用app
variables所看到的那样。
好吧, 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)); ...