我知道这个需要声明的作用。
var express = require('express');
var app = express();
但有时我会在要求后看到两个括号。
var routes = require('./routes')(app);
Q)这是什么意思,它是如何运作的?
答案 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));
...