app.use()ara katmanı uygulamanıza bağlamak için tasarlanmıştır . pathBir "dir monte " ya da " öneki " yolu ve talep sadece herhangi yollara başvurma ara katman sınırlar başlar onunla. Başka bir uygulamayı gömmek için bile kullanılabilir:
// 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'));
// ...
Belirterek /bir "olarak monte " yolu, app.use()herhangi bir yol yanıt verecektir bununla başlar /kullanılan fiil hepsi ve ne olursa olsun, HTTP vardır:
GET /
PUT /foo
POST /foo/bar
- vb.
app.get()Öte yandan, Express'in uygulama yönlendirmesinin bir parçasıdır ve GETHTTP fiiliyle istendiğinde belirli bir rotayı eşleştirmek ve işlemek için tasarlanmıştır :
Ve örneğiniz için eşdeğer yönlendirme app.use()aslında:
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
( Güncelleme: Farklılıkları daha iyi göstermeye çalışıyor. )
Yönlendirme yöntemleri, app.get()yanıtları isteklere daha hassas bir şekilde hizalamanıza yardımcı olan kolaylık yöntemleridir. Ayrıca parametreler ve gibi özellikler için destek ekler next('route').
Her birinin app.get()içinde bir çağrı var app.use(), bu yüzden tüm bunları kesinlikle app.use()doğrudan yapabilirsiniz. Ancak, bunu yapmak genellikle çeşitli miktarlarda kazan plakasının yeniden uygulanmasını (muhtemelen gereksiz yere) gerektirir.
Örnekler:
Basit, statik yollar için:
app.get('/', function (req, res) {
// ...
});
vs.
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
// ...
});
Aynı rota için birden fazla işleyici ile:
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);
// ...
});
});
Parametrelerle:
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;
// ...
});
Not: Bu özelliklerin Express' uygulaması onun içinde bulunur Router, LayerveRoute .