Что означает двойные круглые скобки в требовании
Я знаю, что это требует инструкции.
var express = require('express');
var app = express();
Но иногда я видел две круглые скобки после требования.
var routes = require('./routes')(app);
Q) Что это значит и как это работает?
Ответы
Ответ 1
Это шаблон, в котором для module.exports
модуля задана функция. Требование этого модуля возвращает функцию, а скобки после require оценивают функцию с аргументом.
В приведенном выше примере ваш файл ./routes/index.js
будет выглядеть примерно так:
module.exports = function(app) {
app.get('/', function(req, res) {
});
// ...
};
Этот шаблон часто используется для передачи переменных в модули, что можно увидеть выше с помощью переменной app
.
Ответ 2
Ну, 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);
Ответ 3
Это означает, что за этим существует функция, которая экспортируется с помощью module.exports
:
module.exports = function(app) {
app.get("/", function(req, res){});
}
См. также http://www.choskim.me/understanding-module-exports-and-exports-in-node-js/
Sidenote:
Вы можете создать функцию "на лету":
A.js
module.exports = function(data) {
return function(req, res, next) {
// Do something with data
next();
}
main.js
...
app.use(require("A")(data));
...