2013-06-15 15 views
25

Czy istnieje różnica międzyekspresowe middleware: app.use i app.all

app.use('/some/path', function(req, res, next() {})

i

app.all('/some/path', function(req, res, next() {})

są obie funkcje pośredniczące, które się domagali/some/path tylko żądania, prawda?

+1

Duplikat http://stackoverflow.com/questions/14125997/difference-between-app-all-and-app-use –

Odpowiedz

22

Istnieje duża różnica między wykorzystaniem tych dwóch przykładów. Funkcje zarejestrowane pod numerem app.use są ogólnymi funkcjami oprogramowania pośredniego i są nazywane stosownymi do ich położenia na stosie oprogramowania pośredniego, zazwyczaj wewnątrz funkcji app.configure. Tego typu oprogramowanie pośredniczące jest zwykle umieszczane pod przedapp.route, z wyjątkiem funkcji obsługi błędów.

Z drugiej strony app.all jest funkcją routingu (zwykle nie nazywa middleware), która obejmuje wszystkie metody HTTP i jest wywoływana tylko wewnątrzapp.route. Jeśli którakolwiek z twoich poprzednich funkcji routera pasuje do /some/path i nie zadzwoniła pod numer oddzwonienia , app.all nie zostanie wykonane, więc funkcje app.all są zwykle na początku twojego bloku routingu.

Istnieje również trzeci typ oprogramowania pośredniego, wykorzystywany w funkcjach routingu, np.

app.get('/some/path', middleware1, middleware2, function(req, res, next) {}); 

typicaly który jest stosowany do ograniczenia dostępu i wykonać ogólne czynności związanych /some/path trasy.

Do praktycznego zastosowania można użyć obu funkcji, ale należy zachować ostrożność w odniesieniu do różnicy w zachowaniu podczas korzystania z app.use z /some/path. W przeciwieństwie do app.get, app.use paskami /some/path z trasy przed wywołaniem funkcji anonimowej.

Możesz znaleźć więcej w dokumentacji express.

+0

Dzięki! Świetne wyjaśnienie. – jamiltz

+0

@jamiltz - Proszę oznaczyć to jako odpowiedź. –

+5

Dotyczy to Express 3, ale Express 4 obsługuje to nieco inaczej i są teraz bliżej. –

Powiązane problemy