app.use()
est destiné à lier intergiciel à votre application. Le site path
est un " mont " ou " préfixe "et limite l'intergiciel pour qu'il s'applique seulement aux chemins demandés qui commencer avec elle. Il peut même être utilisé pour intégrer une autre application :
// subapp.js
var express = require('express');
var app = modules.exports = express();
// ...
// server.js
var express = require('express');
var app = express();
app.use('/subapp', require('./subapp'));
// ...
En spécifiant /
comme un " mont " chemin, app.use()
répondra à tout chemin qui commence par /
qui sont toutes et indépendamment du verbe HTTP utilisé :
GET /
PUT /foo
POST /foo/bar
- etc.
app.get()
d'autre part, fait partie du programme "Express". routage d'applications et est destiné à faire correspondre et à traiter une route spécifique lorsqu'elle est demandée avec l'option GET
Verbe HTTP :
Et, le routage équivalent pour votre exemple de app.use()
serait en fait :
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
( Mise à jour : Tentative de mieux démontrer les différences. )
Les méthodes de routage, notamment app.get()
sont des méthodes pratiques qui vous aident à aligner plus précisément les réponses aux demandes. Elles permettent également de prendre en charge des fonctionnalités telles que paramètres y next('route')
.
Dans chaque app.get()
est un appel à app.use()
Vous pouvez donc certainement faire tout cela avec app.use()
directement. Mais, ce faisant, il faudra souvent réimplémenter (probablement inutilement) diverses quantités de code passe-partout.
Exemples :
-
Pour les routes simples et statiques :
app.get('/', function (req, res) {
// ...
});
vs.
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
// ...
});
-
Avec plusieurs gestionnaires pour la même route :
app.get('/', authorize('ADMIN'), function (req, res) {
// ...
});
vs.
const authorizeAdmin = authorize('ADMIN');
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
authorizeAdmin(req, res, function (err) {
if (err) return next(err);
// ...
});
});
-
Avec des paramètres :
app.get('/item/:id', function (req, res) {
let id = req.params.id;
// ...
});
vs.
const pathToRegExp = require('path-to-regexp');
function prepareParams(matches, pathKeys, previousParams) {
var params = previousParams || {};
// TODO: support repeating keys...
matches.slice(1).forEach(function (segment, index) {
let { name } = pathKeys[index];
params[name] = segment;
});
return params;
}
const itemIdKeys = [];
const itemIdPattern = pathToRegExp('/item/:id', itemIdKeys);
app.use('/', function (req, res, next) {
if (req.method !== 'GET') return next();
var urlMatch = itemIdPattern.exec(req.url);
if (!urlMatch) return next();
if (itemIdKeys && itemIdKeys.length)
req.params = prepareParams(urlMatch, itemIdKeys, req.params);
let id = req.params.id;
// ...
});
Remarque : la mise en œuvre de ces fonctionnalités par Express est contenue dans son système de gestion de l'information. Router
, Layer
et Route
.