Questa domanda si estende quella di What is Node.js' Connect, Express and "middleware"?Middleware modello di progettazione in Node.js: Collegare
sto andando il percorso di apprendimento Javascript -> Node.js -> Connessione -> Express -> ... al fine di scopri come utilizzare un moderno stack di sviluppo web. Ho un background in networking a basso livello, quindi andare su e andare con i moduli di Node.js 'net
e http
è stato facile. Lo schema generale di utilizzo di un server per indirizzare le richieste a diversi gestori sembrava naturale e intuitivo.
Passando a Connetti, temo di non capire il paradigma e il flusso generale di dati di questo "middleware". Ad esempio, se creo del middleware da utilizzare con Connect ala;
// example.js
module.exports = function (opts) {
// ...
return function(req, res, next) {
// ...
next();
};
};
e "uso" in Connect via
var example = require('./example');
// ...
var server = connect.createServer();
// ...
server.use(example(some_paramater));
Non so quando il mio middleware viene chiamato. Inoltre, se sono use()
di altri middlware, posso essere garantito nell'ordine in cui viene chiamato il middleware? Inoltre, sono convinto che la funzione next()
sia utilizzata per chiamare il middleware successivo a (ancora, come posso stabilire un ordine?); tuttavia, non vengono passati parametri (req, res, next). Questi parametri sono passati implicitamente in qualche modo?
Sto indovinando che la raccolta di moduli di middleware utilizzati sono legati insieme, a cominciare dal http
callback -> quindi un gruppo di funzionalità aggiuntive nel mezzo della richiesta di richiamata iniziale e il server di terminare una risposta .
Sto cercando di capire il paradigma del middleware e il flusso di informazioni/esecuzione.
Qualsiasi aiuto è molto apprezzato. Grazie per aver letto
Quindi se avessi 'var A = require ('./ A'), B = require ('./ B'); app.use (A()); app.use (B()); 'quindi' A' verrebbe prima di 'B', con' A' 'next' che invoca' B'? I parametri sono quindi passati implicitamente? Altrimenti come 'B' accederà a' req, res, ect'? – gone
Esattamente. Gli oggetti 'req' e' res' stanno attraversando ed è lo stesso oggetto in tutta la catena. In questo modo è possibile salvare alcuni dati al suo interno e quindi riutilizzarli in un altro middleware lungo la catena. Questo è esattamente ciò che accade con la maggior parte dei tuoi dati in 'req'. Ad esempio, per impostazione predefinita, i dati del corpo POST non vengono analizzati e il middleware 'express.bodyParser()' lo analizzerà, e sarà possibile accedervi successivamente in catena. – moka
Fantastico! Grazie per la risposta! – gone