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