Cosa significa doppia parentesi in un bisogno

So cosa richiede questa dichiarazione.

var express = require('express'); var app = express(); 

Ma a volte ho visto due parentesi dopo il bisogno.

 var routes = require('./routes')(app); 

D) Cosa significa e come funziona?

Questo è uno schema in cui module.exports del modulo è impostato su una funzione. Richiedere che il modulo restituisca una funzione e le parentesi dopo il fabbisogno valutano la funzione con un argomento.

Nel tuo esempio precedente, il tuo file ./routes/index.js assomiglierebbe al seguente:

 module.exports = function(app) { app.get('/', function(req, res) { }); // ... }; 

Questo pattern è spesso usato per passare variabili ai moduli, come può essere visto sopra con la variabile app .

Bene, require è una funzione fornita da Node.js che sostanzialmente carica un modulo per te e restituisce qualsiasi cosa tu esponga nel modulo che hai caricato.

Se ciò che esponi (attraverso l’uso di module.exports) in un dato modulo è una funzione, allora questo è ciò che richiede i ritorni. Per esempio.

 //moduleX.js module.exports = function(){ return "Helo World"; } 

Quindi se lo richiedi, ottieni una funzione

 var f = require('./moduleX'); console.log(f()); //hello world 

Naturalmente, è ansible richiamare direttamente la funzione una volta richiesta.

 var greet = require('./moduleX')(); console.log(greet); 

Ciò significa che dietro a ciò, esiste una funzione che viene esportata usando module.exports :

 module.exports = function(app) { app.get("/", function(req, res){}); } 

Vedi anche http://www.choskim.me/understanding-module-exports-and-exports-in-node-js/

Nota a margine:

Puoi creare una funzione al volo:

A.js

 module.exports = function(data) { return function(req, res, next) { // Do something with data next(); } 

main.js

 ... app.use(require("A")(data)); ...