web-dev-qa-db-fra.com

Différences entre express.Router et app.get?

Je commence par NodeJS et Express 4, et je suis un peu confus. Je lisais le site Web express, mais je ne vois pas comment utiliser un gestionnaire d'itinéraire ou quand utiliser express.Router.

Comme je pouvais le voir, si je veux montrer une page ou quelque chose quand l'utilisateur clique sur /show par exemple, je devrais utiliser:

var express = require('express')    
var app = express()    
app.get("/show", someFunction)  

Au début, je pensais que c’était vieux, pour express3, est-ce exact ou c’est aussi le chemin pour express4

Si c'est le moyen de le faire dans express4, à quoi sert express.Router?

J'ai lu presque le même exemple que ci-dessus mais en utilisant express.Router:

var express = require('express');
var router = express.Router();
router.get("/show", someFunction)

Alors, quelle est la différence entre les deux exemples? 

Lequel dois-je utiliser si je veux juste faire un site Web de test simple?

186
nelson687

app.js

var express = require('express'),
    dogs    = require('./routes/dogs'),
    cats    = require('./routes/cats'),
    birds   = require('./routes/birds');

var app = express();

app.use('/dogs',  dogs);
app.use('/cats',  cats);
app.use('/birds', birds);

app.listen(3000);

dogs.js

var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {
    res.send('GET handler for /dogs route.');
});

router.post('/', function(req, res) {
    res.send('POST handler for /dogs route.');
});

module.exports = router;

Lorsque var app = express() est appelé, un objet d'application est renvoyé. Pensez à cela comme à la application principale.

Lorsque var router = express.Router() est appelé, un mini application légèrement différent est renvoyé. L'idée derrière la mini application est que chaque itinéraire de votre application peut devenir assez compliqué et qu'il serait avantageux de déplacer tout ce code dans un fichier séparé. Le routeur de chaque fichier devient un mini application, qui a une structure très similaire à celle du application principale.

Dans l'exemple ci-dessus, le code de la route / dogs a été déplacé dans son propre fichier afin de ne pas encombrer la application principale. Le code pour / cats _ et / oiseaux_ serait structuré de la même manière dans leurs propres fichiers. En séparant ce code en trois mini applications, vous pouvez travailler sur la logique de chacune d'elles séparément et ne vous inquiétez pas des conséquences pour les deux autres.

Si vous avez un code (middleware) qui concerne les trois routes, vous pouvez le placer dans la application principale, avant les appels app.use(...). Si vous avez un code (middleware) qui ne concerne qu'un seul de ces itinéraires, vous pouvez le placer dans le fichier pour cet itinéraire uniquement.

244
Nocturno

Express 4.0 est livré avec le nouveau routeur. Comme mentionné sur le site: 

La classe express.Router peut être utilisée pour créer une route montable modulaire manutentionnaires. Une instance de routeur est un middleware complet et un routage système; pour cette raison, on parle souvent de «mini-application».

Il existe un bon article sur https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 qui décrit les différences et ce que l'on peut faire avec les routeurs. 

Résumer

Avec les routeurs, vous pouvez modulariser votre code plus facilement. Vous pouvez utiliser les routeurs comme:

  1. Itinéraires de base: Accueil, À propos de
  2. Route Middleware pour enregistrer les demandes sur la console
  3. Route avec paramètres
  4. Route Middleware for Parameters pour valider des paramètres spécifiques
  5. Valide un paramètre transmis à une route donnée

Remarque:

L'objet app.router, qui avait été supprimé dans Express 4, a fait un retour dans Express 5. Dans la nouvelle version, il s'agit simplement d'une référence au routeur Express de base, contrairement à Express 3, où une application devait le charger explicitement.

17
Alireza Fattahi
app.route('/book')
  .get(function (req, res) {
    res.send('Get a random book')
  })
  .post(function (req, res) {
    res.send('Post a random book')
  })

Comme dans l'exemple ci-dessus, nous pouvons ajouter différentes méthodes de requête HTTP sous une route.

4
TILAK

express.Router a beaucoup d'options:

  • Activer la sensibilité à la casse. /show route pas la même /Show, mais be default est désactivé
  • mode de routage strict. que /show/ n'est pas le même /show et est également désactivé par défaut
  • Vous pouvez ajouter un middleware spécifique pour des itinéraires spécifiques.
1
Ahmed Alawady

utiliser app.js pour écrire des itinéraires signifie qu'ils sont accessibles à tous les utilisateurs, car app.js est chargé au démarrage de l'application. Cependant, l'insertion de routes dans les mini-applications express.router () protège et restreint leur accessibilité.

1
T.Soundarya

Disons que votre application est peu complexe. Donc, ce que nous faisons en premier lieu, c’est que nous divisons l’application en plusieurs modules de manière à ce que les modifications apportées à un module n’encombrent pas les autres et que vous puissiez continuer à travailler sur des modules individuels. construisent une seule application. C'est comme si nous avions une application principale et peu d'applications enfants dont le parent est l'application principale. Ainsi, lorsque nous créons l'application parente, nous en créons une en utilisant 

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

Et pour cette application parent, nous devons intégrer les applications enfants. Mais comme les applications enfants ne sont pas des applications totalement différentes (puisqu'elles s'exécutent dans le même contexte contexte-Java), express fournit le moyen de le faire au moyen de la fonction de routeur d'Express et c'est ce que nous faisons dans chaque fichier de module enfant. appelons un de ces modules enfants en tant que aboutme.

var express = require('express');
var router = express.Router();
/**
** do something here
**/
module.exports = router;

Par module.exports, nous rendons ce module disponible pour être consommé par d'autres. Comme nous avons modularisé les éléments, nous devons rendre les fichiers de module disponibles pour l'application parente au moyen de la fonction require du nœud, comme tout autre module tiers. le fichier parent ressemble à quelque chose comme ça.

var express = require('express') 
var parent = express() 
var child = require(./aboutme)

après avoir mis ce module enfant à la disposition du parent, nous devons indiquer à l'application parent quand utiliser cette application enfant. Disons que lorsqu'un utilisateur clique sur le chemin à propos de moi, nous avons besoin de l'application enfant à propos de moi pour gérer la demande et nous le faisons en utilisant la méthode use de Expresse.

parent.use('/aboutme',  aboutme);

et d'un coup le fichier parent ressemble à ceci

var express = require('express');
var parent = express();
var child = require(./aboutme);
/***
**do some stuff here
**/
parent.use('/aboutme',aboutme);

Ce que le parent peut faire avant tout, c’est qu’il puisse démarrer un serveur là où l’enfant ne le peut pas.J'espère que cela clarifie. Pour plus d’informations, vous pouvez toujours consulter le code source, ce qui prend un certain temps mais vous donne beaucoup d’informations. Je vous remercie.

1
raj240

Dans Word, express.Routerpeut faire plus de choses lorsque vous comparez à app.get(), tel qu'un middleware. De plus, vous pouvez définir un objet routeur supplémentaire avec express.Router()

0
yuanfang wang