Routage
Le routage fait référence à la manière de définir les points de terminaison de l'application (URI) et à la manière de répondre aux demandes des clients.
Le routage est composé d'un URI, d'une requête HTTP (GET, POST, etc.) et de plusieurs handles. Sa structure est la suivante : app.METHOD(path, [callback...], callback), app est un express. object Exemple, METHOD est une méthode de requête HTTP, path est le chemin sur le serveur et callback est la fonction à exécuter lorsque la route correspond.
Voici un exemple de routage de base :
var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); });
Méthode de routage
La méthode de routage provient de la méthode de requête HTTP et est associée à l'instance express.
L'exemple suivant montre les requêtes GET et POST définies pour l'application et le chemin :
// GET method route app.get('/', function (req, res) { res.send('GET request to the homepage'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); });
Express définit les méthodes de routage suivantes correspondant aux requêtes HTTP : get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, fusionner, effectuer une recherche mobile, notifier, s'abonner, se désabonner, corriger, rechercher et se connecter.
Certains noms de méthodes de routage ne sont pas des noms de variables JavaScript légaux. Dans ce cas, utilisez la notation entre crochets, par exemple : app['m-search']('/', function ...
app.all() est une méthode de routage spéciale qui ne correspond à aucune méthode HTTP. Sa fonction est de charger un middleware pour toutes les requêtes sur un chemin.
Dans l'exemple ci-dessous, le handle sera exécuté pour les requêtes provenant de "/secret", qu'elles utilisent GET, POST, PUT, DELETE ou toute autre requête HTTP prise en charge par le module http.
app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler });
Chemin de routage
Le chemin de routage et la méthode de requête définissent ensemble le point final de la requête, qui peut être une chaîne, un modèle de chaîne ou une expression régulière.
Express utilise path-to-regexp pour faire correspondre les chemins de routage. Veuillez vous référer à la documentation pour toutes les méthodes de définition des chemins de routage. Express Route Tester est un excellent outil pour tester les itinéraires Express de base, mais ne prend pas en charge la correspondance de modèles.
La chaîne de requête ne fait pas partie du chemin de routage.
Exemple de chemin de routage utilisant une chaîne :
// 匹配根路径的请求 app.get('/', function (req, res) { res.send('root'); }); // 匹配 /about 路径的请求 app.get('/about', function (req, res) { res.send('about'); }); // 匹配 /random.text 路径的请求 app.get('/random.text', function (req, res) { res.send('random.text'); }); 使用字符串模式的路由路径示例: // 匹配 acd 和 abcd app.get('/ab?cd', function(req, res) { res.send('ab?cd'); }); // 匹配 abcd、abbcd、abbbcd等 app.get('/ab+cd', function(req, res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 app.get('/ab*cd', function(req, res) { res.send('ab*cd'); }); // 匹配 /abe 和 /abcde app.get('/ab(cd)?e', function(req, res) { res.send('ab(cd)?e'); });
Les caractères ?, , * et () sont un sous-ensemble d'expressions régulières, - et . sont interprétés littéralement dans des chemins basés sur des chaînes.
Exemple de chemin de routage utilisant des expressions régulières :
// 匹配任何路径中含有 a 的路径: app.get(/a/, function(req, res) { res.send('/a/'); }); // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function(req, res) { res.send('/.*fly$/'); });
Poignée d'itinéraire
Vous pouvez fournir plusieurs fonctions de rappel pour le traitement des requêtes, qui se comportent comme un middleware. La seule différence est que ces fonctions de rappel peuvent appeler la méthode next('route') et ignorer d'autres fonctions de rappel d'itinéraire. Ce mécanisme peut être utilisé pour définir des conditions préalables au routage, et si cela n'a aucun sens de poursuivre l'exécution sur le chemin existant, le contrôle peut être donné au chemin restant.
Les poignées d'itinéraire se présentent sous de nombreuses formes et peuvent être une fonction, un tableau de fonctions ou un mélange des deux, comme indiqué ci-dessous.
Utilisez une fonction de rappel pour gérer le routage :
app.get('/example/a', function (req, res) { res.send('Hello from A!'); });
Utilisez plusieurs fonctions de rappel pour gérer le routage (n'oubliez pas de spécifier l'objet suivant) :
app.get('/example/b', function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from B!'); });
Utiliser un tableau de fonctions de rappel pour gérer le routage :
var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } var cb2 = function (req, res) { res.send('Hello from C!'); } app.get('/example/c', [cb0, cb1, cb2]);
Utilisez un mélange de fonctions et de tableaux de fonctions pour gérer le routage :
var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } app.get('/example/d', [cb0, cb1], function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from D!'); });
Méthode de réponse
Les méthodes de l'objet de réponse (res) dans le tableau suivant renvoient une réponse au client, mettant ainsi fin au cycle requête-réponse. Si aucune méthode n’est appelée dans le handle de route, les requêtes du client seront suspendues.