Что означает двойные круглые скобки в требовании

Я знаю, что это требует инструкции.

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));
...