NodeJS / Express: qu’est-ce que “app.use”?

Dans les documents du module express NodeJS , l’exemple de code contient app.use(...) .

Quelle est la fonction d’ use et où est-elle définie?

L’object app est instancié lors de la création du serveur Express. Il a une stack de middleware qui peut être personnalisée dans app.configure() (ceci est maintenant obsolète dans la version 4.x) .

Pour configurer votre middleware, vous pouvez appeler app.use() pour chaque couche de middleware que vous souhaitez append (elle peut être générique pour tous les chemins ou être déclenchée uniquement sur des chemins spécifiques gérés par votre serveur). va append à votre stack de middleware Express . Les couches middleware peuvent être ajoutées une à une lors de multiples invocations d’ use , voire en une seule fois en série avec une invocation. Voir la documentation d’ use pour plus de détails.

Pour donner un exemple de compréhension conceptuelle d’Express Middleware, voici à quoi ressemble ma stack middleware d’application (app.stack) lors de la connexion de mon object d’application à la console en tant que 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] } ] 

Comme vous pouvez en déduire, j’ai appelé app.use(express.bodyParser()) , app.use(express.cookieParser()) , etc., qui a ajouté ces couches de middleware express à la stack de middleware. Notez que les routes sont vides, ce qui signifie que lorsque j’ai ajouté ces couches de middleware, j’ai spécifié qu’elles devaient être déclenchées sur n’importe quelle route. Si j’ai ajouté une couche middleware personnalisée qui ne se déclenche que sur le chemin /user/:id qui serait reflété sous la forme d’une chaîne dans le champ route de cet object de couche middleware dans l’impression de la stack ci-dessus.

Chaque couche consiste essentiellement à append une fonction spécifique à votre stream via le middleware.

Par exemple, en ajoutant bodyParser , vous vous bodyParser que votre serveur gère les demandes entrantes via le middleware express . Ainsi, l’ parsing du corps des requêtes entrantes fait désormais partie de la procédure que prend votre middleware lors du traitement des requêtes entrantes , tout cela parce que vous avez appelé app.use(bodyParser) .

use est une méthode pour configurer le middleware utilisé par les routes de l’object serveur HTTP Express. La méthode est définie dans le cadre de Connect sur lequel Express est basé.

Chaque app.use (middleware) est appelée chaque fois qu’une demande est envoyée au serveur.

app.use () utilisé pour monter la fonction de middleware ou monter sur un chemin spécifié, la fonction de middleware est exécutée lorsque le chemin de base correspond.

Par exemple: si vous utilisez app.use () dans indexRouter.js, comme ceci:

 //indexRouter.js var adsRouter = require('./adsRouter.js'); module.exports = function(app) { app.use('/ads', adsRouter); } 

Dans le code ci-dessus, app.use () monte le chemin sur ‘/ ads’ vers adsRouter.js.

Maintenant dans adsRouter.js

 // adsRouter.js var router = require('express').Router(); var controllerIndex = require('../controller/index'); router.post('/show', controllerIndex.ads.showAd); module.exports = router; 

dans adsRouter.js, le chemin sera le suivant pour ads- ‘/ ads / show’, puis il fonctionnera selon controllerIndex.ads.showAd ().

app.use ([path], callback, [callback]): nous pouvons append un rappel sur le même.

 app.use('/test', function(req, res, next) { // write your callback code here. }); 

app.use () fonctionne comme ça:

  1. Demande d’événement transféré sur l’instance de serveur http du noeud.
  2. express effectue une partie de sa manipulation interne avec l’object req.
  3. C’est à ce moment que express commence à faire les choses que vous avez spécifiées avec app.use

ce qui est très simple.

Et seulement alors express fera le rest des choses comme le routage.

app.use () agit comme un middleware dans les applications express. Contrairement à app.get () et app.post () , vous pouvez utiliser app.use () sans spécifier l’URL de la demande. En pareil cas, il est exécuté à chaque fois, quelle que soit l’URL touchée.

En express si nous importons express de “express” et utilisons app = express (); puis l’application ayant toutes les fonctionnalités de express

si nous utilisons app.use ()

avec toute fonction module / middleware à utiliser dans tout projet express

Middleware est un terme général pour les logiciels servant à “coller ensemble”. Par exemple, app.use est une méthode pour configurer le middleware: parsingr et gérer le corps de la requête: app.use (bodyParser.urlencoded ({extended: true })); app.use (bodyParser.json ()); il existe de nombreux middlewares que vous pouvez utiliser dans votre application express, il suffit de lire la doc: http://expressjs.com/en/guide/using-middleware.html

app.use applique le middleware spécifié à la stack de middleware d’application principale. Lorsque vous connectez un middleware à la stack principale de l’application, l’ordre des pièces jointes est important. Si vous connectez un middleware A avant le middleware B, le middleware A sera toujours exécuté en premier. Vous pouvez spécifier un chemin pour lequel un middleware particulier est applicable. Dans l’exemple ci-dessous, «hello world» sera toujours enregistré avant «joyeuses fêtes».

 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() }) 

Lier un middleware de niveau application à une instance de l’object app à l’aide des fonctions app.use () et app.METHOD (), où METHOD est la méthode HTTP de la requête gérée par la fonction middleware (telle que GET, PUT ou POST) en minuscule.