Nel documenti per il express
modulo NodeJS , il codice di esempio ha app.use(...)
.
Quale è use
funzione e dove viene definita?
Nel documenti per il express
modulo NodeJS , il codice di esempio ha app.use(...)
.
Quale è use
funzione e dove viene definita?
Risposte:
L'oggetto app viene istanziato alla creazione del server Express. Ha uno stack di middleware che può essere personalizzato app.configure()
(ora è deprecato nella versione 4.x) .
Per configurare il middleware, è possibile richiamare app.use(<specific_middleware_layer_here>)
per ogni livello di middleware che si desidera aggiungere (può essere generico per tutti i percorsi o attivato solo su percorsi specifici gestiti dal server) e verrà aggiunto allo stack del middleware Express . I livelli di middleware possono essere aggiunti uno alla volta in più invocazioni use
o anche tutte in una volta in serie con un'unica invocazione. Vedi la use
documentazione per maggiori dettagli.
Per fare un esempio per la comprensione concettuale di Express Middleware, ecco come appare lo stack del mio middleware per app (app.stack) quando si registra l'oggetto app nella console come JSON:
stack:
[ { route: '', handle: [Function] },
{ route: '', handle: [Function: static] },
{ route: '', handle: [Function: bodyParser] },
{ route: '', handle: [Function: cookieParser] },
{ route: '', handle: [Function: session] },
{ route: '', handle: [Function: methodOverride] },
{ route: '', handle: [Function] },
{ route: '', handle: [Function] } ]
Come potreste essere in grado di dedurre, ho chiamato app.use(express.bodyParser())
, app.use(express.cookieParser())
ecc., Che ha aggiunto questi "livelli" di middleware rapidi allo stack di middleware. Si noti che i percorsi sono vuoti, il che significa che quando ho aggiunto quei livelli di middleware ho specificato che sarebbero stati attivati su qualsiasi percorso. Se aggiungessi un livello middleware personalizzato che si innescherebbe solo sul percorso /user/:id
che verrebbe riflesso come una stringa nel route
campo dell'oggetto livello middleware nella stampa dello stack sopra.
Ogni livello aggiunge essenzialmente una funzione che gestisce in modo specifico qualcosa al flusso attraverso il middleware.
Ad esempio aggiungendo bodyParser
, stai assicurando che il tuo server gestisca le richieste in arrivo attraverso il middleware express . Quindi, ora analizzare il corpo delle richieste in arrivo fa parte della procedura che il tuo middleware prende quando gestisce le richieste in arrivo , tutto perché hai chiamato app.use(bodyParser)
.
next()
callback che ogni middleware dovrebbe chiamare per passare l'elaborazione alla funzione successiva nella pipeline. Il sistema di routing (il primo argomento a app.use()
) consente alla pipeline di diramarsi in base all'URL
use
è un metodo per configurare il middleware utilizzato dalle route dell'oggetto server HTTP Express. Il metodo è definito come parte di Connect su cui si basa Express.
Aggiornamento A partire dalla versione 4.x, Express non dipende più da Connect .
Le funzioni del middleware precedentemente incluse con Express sono ora in moduli separati; vedere l' elenco delle funzioni del middleware .
app.use(function(){ var object = new SomeConstructor; next(); })
Ogni app.use (middleware) viene chiamato ogni volta che una richiesta viene inviata al server.
app.use () utilizzato per montare la funzione middleware o montare su un percorso specificato, la funzione middleware viene eseguita quando il percorso di base corrisponde.
Ad esempio: se si utilizza app.use () in indexRouter.js, in questo modo:
//indexRouter.js
var adsRouter = require('./adsRouter.js');
module.exports = function(app) {
app.use('/ads', adsRouter);
}
Nel codice sopra app.use () montare il percorso su "/ ads" su adsRouter.js.
Ora in adsRouter.js
// adsRouter.js
var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;
in adsRouter.js, il percorso sarà così per ads- '/ ads / show', e quindi funzionerà secondo controllerIndex.ads.showAd ().
app.use ([percorso], callback, [callback]): possiamo aggiungere un callback sullo stesso.
app.use('/test', function(req, res, next) {
// write your callback code here.
});
app.use () funge da middleware nelle app express. A differenza di app.get () e app.post () o giù di lì, in realtà puoi usare app.use () senza specificare l'URL della richiesta. In tal caso, viene eseguito ogni volta, indipendentemente dall'URL che è stato colpito.
app.use () funziona così:
quale molto semplice.
E solo allora express farà il resto delle cose come il routing.
app.use(function middleware1(req, res, next){
// middleware1 logic
}, function middleware1(req, res, next){
// middleware2 logic
}, ... middlewareN);
app.use è un modo per registrare middleware o catena di middleware (o più middleware) prima di eseguire qualsiasi logica di route finale o logica di route intermedia a seconda dell'ordine della sequenza di registrazione del middleware.
Middleware: forma una catena di funzioni / funzioni middleware con 3 parametri req, res e next . il prossimo è il callback che si riferisce alla successiva funzione middleware nella catena e, nel caso dell'ultima funzione middleware della catena, i punti successivi alla funzione primo middleware della prossima catena middlerare registrata.
In express se importiamo express da "express" e utilizziamo app = express (); quindi app con tutte le funzionalità di express
se usiamo app.use ()
con qualsiasi funzione modulo / middleware da utilizzare in tutto il progetto express
app.use
è una funzione richiede middleware. Per esempio:
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
Questo esempio mostra la funzione middleware installata nel /user/:id
percorso. Questa funzione viene eseguita per qualsiasi tipo di richiesta HTTP nel /user/:id
percorso.
È simile al server Web REST, basta usare diversi /xx
per rappresentare azioni diverse.
use
può fare; Avevo solo bisogno di sapere che era quello che era (e qualsiasi conoscenza del contesto per sapere come andare di ricerca più me stesso).
app.use è woks come middleware per la richiesta di app. sintassi
app.use('pass request format',function which contain request response onject)
esempio
app.use('/',funtion(req,res){
console.log(all request pass through it);
// here u can check your authentication and other activities.
})
inoltre puoi usarlo in caso di inoltro della tua richiesta.
app.use('/', roting_object);
Middleware è un termine generale per software che serve a "incollare", quindi app.use è un metodo per configurare il middleware, ad esempio: analizzare e gestire il corpo della richiesta: app.use (bodyParser.urlencoded ({extended: true })); app.use (bodyParser.json ()); ci sono molti middleware che puoi usare nella tua applicazione express basta leggere il documento: http://expressjs.com/en/guide/using-middleware.html
app.use applica il middleware specificato allo stack del middleware dell'app principale. Quando si collega il middleware allo stack dell'app principale, l'ordine di allegato è importante; se si collega il middleware A prima del middleware B, il middleware A verrà sempre eseguito per primo. È possibile specificare un percorso per cui è applicabile un determinato middleware. Nell'esempio seguente, "ciao mondo" verrà sempre registrato prima di "buone vacanze".
const express = require('express')
const app = express()
app.use(function(req, res, next) {
console.log('hello world')
next()
})
app.use(function(req, res, next) {
console.log('happy holidays')
next()
})
Ti consente di utilizzare qualsiasi middleware ( leggi di più ) come body_parser
, CORS
ecc. Il middleware può apportare modifiche request
e response
oggetti. Può anche eseguire un pezzo di codice.
Puoi anche creare la tua funzione middleware come
app.use( function(req, res, next) {
// your code
next();
})
Esso contiene tre parametri req
, res
, next
è possibile anche usare per l'autenticazione e la convalida di params di ingresso per mantenere il controller pulito.
next()
viene utilizzato per passare al middleware o al percorso successivo.
È possibile inviare la risposta dal middleware
Associare il middleware a livello di applicazione a un'istanza dell'oggetto app utilizzando le funzioni app.use () e app.METHOD (), dove METHOD è il metodo HTTP della richiesta gestita dalla funzione middleware (come GET, PUT o POST) in minuscolo.
In breve app.use () supporta tutti i tipi di richieste [ad esempio: get, post, ...], quindi viene utilizzato principalmente per configurare il middelware. o può essere utilizzato per quando i percorsi e le funzioni sono separati
esempio:
app.use("/test",functionName)
e functionName si trova in un file diverso
app.use()
è un metodo middleware.
Il metodo middleware è come un intercettore in Java, questo metodo viene sempre eseguito per tutte le richieste.
Scopo e uso del middleware: -
app.use
è creato da express (framework middleware nodejs)
app.use è utilizzato per eseguire qualsiasi query specifica nel processo di
intilization server.js (nodo)
var app = ('express');
quindi la funzione sostanzialmente app.use viene chiamata ogni volta che il server è attivo
app.use(bodyparser.json())
app.use è un middleware a livello di applicazione
Associare il middleware a livello di applicazione a un'istanza dell'oggetto app utilizzando le funzioni app.use () e app.METHOD (), dove METHOD è il metodo HTTP della richiesta gestita dalla funzione middleware (come GET, PUT o POST) in minuscolo.
puoi usare per controllare tutte le richieste, ad esempio, vuoi controllare token / token di accesso che devi scrivere un middleware usando app.use per controllare il token nella richiesta.
Questo esempio mostra una funzione middleware senza percorso di montaggio. La funzione viene eseguita ogni volta che l'app riceve una richiesta.
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
riferimento da https://expressjs.com/en/guide/using-middleware.html
app.use (percorso, middleware) viene utilizzato per chiamare la funzione middleware che deve essere chiamata prima che il percorso venga colpito per il percorso corrispondente. È possibile richiamare più funzioni middleware tramite app.use.
app.use ('/ fetch', enforceAuthentication) -> il middleware enforceAuthentication fn verrà chiamato quandoviene ricevutauna richiesta che inizia con '/ fetch' . Può essere / fetch / users , / fetch / ids / {id} , ecc
Alcune funzioni del middleware potrebbero dover essere richiamate indipendentemente dalla richiesta. In tali casi, non viene specificato un percorso e poiché il percorso viene impostato automaticamente su / e ogni richiesta inizia con / , questa funzione middleware verrà chiamata per tutte le richieste.
app.use (() => {// Inizializza un servizio comune})
next () fn deve essere chiamato all'interno di ciascuna funzione middleware quando vengono passate più funzioni middleware ad app.use , altrimenti la successiva funzione middleware non verrà chiamata.
riferimento: http://expressjs.com/en/api.html#app.use
Nota: la documentazione dice che possiamo bypassare le funzioni del middleware seguendo quella corrente chiamando next ('route') all'interno della funzione middleware corrente, ma questa tecnica non ha funzionato per me all'interno di app.use ma ha funzionato con app.METHOD come di seguito . Quindi, sono stati chiamati fn1 e fn2 ma non fn3.
app.get('/fetch', function fn1(req, res, next) {
console.log("First middleware function called");
next();
},
function fn2(req, res, next) {
console.log("Second middleware function called");
next("route");
},
function fn3(req, res, next) {
console.log("Third middleware function will not be called");
next();
})