Różnica między app.zastosowanie i aplikacja.wsiadaj ekspresowo.js
Jestem trochę nowy w ekspresie i węźle.js, a ja nie mogę rozgryźć różnicy między app.zastosowanie i aplikacja.get. Wygląda na to, że możesz użyć obu do wysyłania informacji. Na przykład:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
Wydaje się być takie samo jak to:
app.get('/', function (req,res) {
res.send('Hello');
});
5 answers
app.use()
jest przeznaczony do wiązania middleware z Twoją aplikacją. Jest to ścieżka" mount "lub" prefiks " i ogranicza oprogramowanie pośredniczące do stosowania tylko do dowolnych ścieżek, które begin z nim. Może być nawet użyty do osadzenia innej aplikacji:
// 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'));
// ...
Poprzez podanie /
jako ścieżki" mount", app.use()
odpowie na każdą ścieżkę zaczynającą się od /
, które są wszystkimi i niezależnie od HTTP użyty czasownik:
GET /
PUT /foo
POST /foo/bar
- itd.
app.get()
, Z drugiej strony, jest częścią Express' application routing i jest przeznaczony do dopasowania i obsługi określonej trasy, gdy jest wymagane z GET
HTTP czasownik:
GET /
I, równoważny routing dla Twojego przykładu app.use()
będzie w rzeczywistości:
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
(Update: próba lepszego wykazania różnice.)
Metody routingu, w tym app.get()
, są wygodnymi metodami, które pomagają precyzyjniej dopasować odpowiedzi do żądań. Dodają również wsparcie dla funkcji, takich jak parametry i next('route')
.
Wewnątrz każdego app.get()
jest wezwanie do app.use()
, więc z pewnością możesz to zrobić bezpośrednio z app.use()
. Ale, robi to często wymaga (prawdopodobnie niepotrzebnie) reimplementing różnych ilości kotła kod.
Przykłady:
-
Dla prostych, statycznych tras:
app.get('/', function (req, res) { // ... });
Vs.
app.use('/', function (req, res, next) { if (req.method !== 'GET' || req.url !== '/') return next(); // ... });
-
Z wieloma uchwytami dla tej samej trasy:
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); // ... }); });
-
Z parametrami:
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; // ... });
Uwaga: Express ' implementacja tych funkcji jest zawarta w jego
Router
,Layer
, orazRoute
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-15 21:16:53
app.use
jest metodą "niższego poziomu" od Connect, od której zależy Framework middleware.
Oto moje wytyczne:
- Użyj
app.get
, jeśli chcesz ujawnić metodę GET. - Użyj
app.use
, jeśli chcesz dodać oprogramowanie pośredniczące (obsługę żądania HTTP, zanim dotrze ono do tras skonfigurowanych w programie Express) lub jeśli chcesz, aby Twoje trasy były modułowe (na przykład Udostępnij zestaw tras z modułu npm, który inne aplikacje internetowe mogłyby zastosowanie).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-24 17:45:11
Po prostu
app.użyj oznacza "Uruchom to na wszystkich żądaniach"
app.get oznacza "Uruchom to na żądanie GET, dla podanego adresu URL"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 09:47:47
app.get
jest wywoływana, gdy metoda HTTP jest ustawiona na GET
, podczas gdy app.use
jest wywoływana niezależnie od metody HTTP i dlatego definiuje warstwę, która znajduje się na wierzchu wszystkich innych typów RESTful, do których pakiety express dają dostęp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-24 17:38:47
Różnica między app.use
& app.get
:
app.use
→ jest on zwykle używany do wprowadzania middlewares w aplikacji i może obsługiwać wszystkie typy żądań HTTP.
app.get
→ służy tylko do obsługi żądań GET HTTP.
Teraz jest zamieszanie między app.use
& app.all
. Bez wątpienia jest w nich jedna wspólna rzecz, że oba mogą obsługiwać wszelkiego rodzaju żądania HTTP.
Ale są pewne różnice, które zalecają nam korzystanie z aplikacji.Użyj dla middlewares i app.wszystko dla trasy obsługa.
app.use()
→ wystarczy jedno oddzwonienie.app.all()
→ może przyjmować wiele wywołań zwrotnych.app.use()
sprawdzi tylko, czy url zaczyna się od podanej ścieżki.
Aleapp.all()
będzie pasować do całej ścieżki.
Na przykład,
app.use( "/book" , middleware);
// will match /book
// will match /book/author
// will match /book/subject
app.all( "/book" , handler);
// will match /book
// won't match /book/author
// won't match /book/subject
app.all( "/book/*" , handler);
// won't match /book
// will match /book/author
// will match /book/author
-
next()
wywołanie wewnątrzapp.use()
wywoła następny program pośredniczący lub dowolny program obsługujący trasę, alenext()
wywołanie wewnątrzapp.all()
wywoła następny program obsługujący trasę(app.all()
,app.get/post/put...
itd.) tylko. Jeśli nie ma żadnego oprogramowania pośredniego po, zostanie pominięty. Tak więc wskazane jest, aby umieścić wszystkie middlewares zawsze nad obsługujących trasy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 17:49:10