【发布时间】:2019-02-02 07:59:43
【问题描述】:
我知道这个 require 语句的作用。
var express = require('express');
var app = express();
但有时我会在 require 后面看到两个括号。
var routes = require('./routes')(app);
Q)这是什么意思,它是如何工作的?
【问题讨论】:
-
This 可能会有所帮助
我知道这个 require 语句的作用。
var express = require('express');
var app = express();
但有时我会在 require 后面看到两个括号。
var routes = require('./routes')(app);
Q)这是什么意思,它是如何工作的?
【问题讨论】:
这是一种模式,其中您需要的模块的module.exports 被设置为一个函数。 Requiring 那个模块返回一个函数,require 后面的括号用一个参数计算这个函数。
在上面的示例中,您的 ./routes/index.js 文件如下所示:
module.exports = function(app) {
app.get('/', function(req, res) {
});
// ...
};
这种模式通常用于将变量传递给模块,如上面的app 变量所示。
【讨论】:
var express = require('express'); var app = express(); 可以这样写:var app = require('express')(); ...即使这并不意味着它 应该 =)
好吧,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/
旁注:
您可以动态创建函数:
A.js
module.exports = function(data) {
return function(req, res, next) {
// Do something with data
next();
}
main.js
...
app.use(require("A")(data));
...
【讨论】: