Maison  >  Article  >  interface Web  >  Explication détaillée des compétences Express Routing_Javascript

Explication détaillée des compétences Express Routing_Javascript

WBOY
WBOYoriginal
2016-05-16 15:26:281370parcourir

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.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn