W dokumentacji dla express
modułu NodeJS przykładowy kod ma app.use(...)
.
Jaka jest use
funkcja i gdzie jest zdefiniowana?
W dokumentacji dla express
modułu NodeJS przykładowy kod ma app.use(...)
.
Jaka jest use
funkcja i gdzie jest zdefiniowana?
Odpowiedzi:
Obiekt aplikacji jest tworzony przy tworzeniu serwera Express. Ma stos oprogramowania pośredniego, który można dostosować app.configure()
(jest to obecnie przestarzałe w wersji 4.x) .
Aby skonfigurować oprogramowanie pośrednie, możesz wywołać app.use(<specific_middleware_layer_here>)
każdą warstwę oprogramowania pośredniego, które chcesz dodać (może być ogólne dla wszystkich ścieżek lub uruchamiane tylko na określonych ścieżkach obsługiwanych przez serwer), i doda się do stosu oprogramowania pośredniego Express . Warstwy oprogramowania pośredniego można dodawać jeden po drugim w wielu wywołaniach use
lub nawet wszystkie jednocześnie w jednym wywołaniu. Więcej informacji znajduje się w use
dokumentacji .
Aby podać przykład koncepcyjnego zrozumienia Express Middleware, oto jak wygląda mój stos oprogramowania pośredniego aplikacji (app.stack) podczas logowania obiektu aplikacji do konsoli jako JSON:
stack:
[ { route: '', handle: [Function] },
{ route: '', handle: [Function: static] },
{ route: '', handle: [Function: bodyParser] },
{ route: '', handle: [Function: cookieParser] },
{ route: '', handle: [Function: session] },
{ route: '', handle: [Function: methodOverride] },
{ route: '', handle: [Function] },
{ route: '', handle: [Function] } ]
Jak może być w stanie wydedukować, zadzwoniłem app.use(express.bodyParser())
, app.use(express.cookieParser())
itp, który dodaje te wyrażają middleware „warstw” na stos middleware. Zauważ, że trasy są puste, co oznacza, że kiedy dodałem te warstwy oprogramowania pośredniego, podałem, że będą one uruchamiane na dowolnej trasie. Gdybym dodał niestandardową warstwę oprogramowania pośredniego, która wyzwalała się tylko na ścieżce, /user/:id
która byłaby odzwierciedlona jako ciąg znaków w route
polu tego obiektu warstwy oprogramowania pośredniego na wydruku stosu powyżej.
Każda warstwa zasadniczo dodaje funkcję, która konkretnie obsługuje coś w twoim przepływie przez oprogramowanie pośrednie.
Np. Dodając bodyParser
, masz pewność , że Twój serwer obsługuje przychodzące żądania za pośrednictwem ekspresowego oprogramowania pośredniego . Dlatego teraz analizowanie treści przychodzących żądań jest częścią procedury, którą wykonuje oprogramowanie pośrednie podczas obsługi żądań przychodzących - wszystko dlatego, że zadzwoniłeś app.use(bodyParser)
.
next()
wywołaniem zwrotnym, które ma wywoływać każde oprogramowanie pośrednie, aby przekazać przetwarzanie do następnej funkcji w potoku. System routingu (pierwszy argument app.use()
) pozwala na rozgałęzienie potoku w zależności od adresu URL
use
to metoda konfiguracji oprogramowania pośredniego używanego przez trasy obiektu serwera Express HTTP. Metoda jest zdefiniowana jako część Connect, na której opiera się Express.
Aktualizacja Począwszy od wersji 4.x, Express nie zależy już od Connect .
Funkcje oprogramowania pośredniego, które wcześniej były zawarte w Express, są teraz w osobnych modułach; zobacz listę funkcji oprogramowania pośredniego .
app.use(function(){ var object = new SomeConstructor; next(); })
Każde app.use (oprogramowanie pośrednie) jest wywoływane za każdym razem, gdy żądanie jest wysyłane do serwera.
app.use () służy do montowania funkcji oprogramowania pośredniego lub montowania do określonej ścieżki, funkcja oprogramowania pośredniego jest wykonywana, gdy ścieżka podstawowa jest zgodna.
Na przykład: jeśli używasz app.use () w indexRouter.js, to tak:
//indexRouter.js
var adsRouter = require('./adsRouter.js');
module.exports = function(app) {
app.use('/ads', adsRouter);
}
W powyższym kodzie app.use () zamontuj ścieżkę na „/ ads” do adsRouter.js.
Teraz w adsRouter.js
// adsRouter.js
var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;
w adsRouter.js ścieżka będzie taka jak dla ads- '/ ads / show', a następnie będzie działać zgodnie z controllerIndex.ads.showAd ().
app.use ([ścieżka], oddzwanianie, [oddzwonienie]): możemy dodać oddzwanianie na to samo.
app.use('/test', function(req, res, next) {
// write your callback code here.
});
app.use () działa jako oprogramowanie pośrednie w aplikacjach ekspresowych. W przeciwieństwie do app.get () i app.post () , możesz użyć app.use () bez podawania adresu URL żądania. W takim przypadku program jest wykonywany za każdym razem, bez względu na trafiony adres URL.
app.use () działa w ten sposób:
co bardzo proste.
I tylko wtedy ekspres wykona resztę rzeczy, takich jak routing.
app.use(function middleware1(req, res, next){
// middleware1 logic
}, function middleware1(req, res, next){
// middleware2 logic
}, ... middlewareN);
app.use to sposób na rejestrację oprogramowania pośredniego lub łańcucha oprogramowania pośredniego (lub wielu programów pośrednich ) przed wykonaniem jakiejkolwiek logiki trasy końcowej lub logiki trasy pośredniej, w zależności od kolejności sekwencji rejestracji oprogramowania pośredniego.
Oprogramowanie pośrednie: tworzy łańcuch funkcji / funkcje oprogramowania pośredniego z 3 parametrami: wymagania, res i dalej . next jest wywołaniem zwrotnym, które odnosi się do następnej funkcji oprogramowania pośredniego w łańcuchu, aw przypadku ostatniej funkcji oprogramowania pośredniego łańcucha kolejne punkty do funkcji pierwszego oprogramowania pośredniego następnego zarejestrowanego łańcucha pośredniego.
W express, jeśli importujemy ekspres z „express” i używamy app = express (); następnie aplikacja posiadająca wszystkie funkcje ekspresowe
jeśli użyjemy app.use ()
z dowolną funkcją modułu / oprogramowania pośredniego do użycia w całym projekcie ekspresowym
app.use
jest funkcją wymagającą oprogramowania pośredniego. Na przykład:
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
Ten przykład pokazuje zainstalowaną na /user/:id
ścieżce funkcję oprogramowania pośredniego . Ta funkcja jest wykonywana dla dowolnego typu żądania HTTP na /user/:id
ścieżce.
Jest podobny do serwera REST Web Server, wystarczy użyć innego /xx
do reprezentowania różnych działań.
use
może zrobić ekspres ; Po prostu musiałem wiedzieć, że to jest to (i wszelka wiedza kontekstowa, aby wiedzieć, jak samodzielnie badać).
app.use jest woksem jako oprogramowanie pośrednie dla żądania aplikacji. składnia
app.use('pass request format',function which contain request response onject)
przykład
app.use('/',funtion(req,res){
console.log(all request pass through it);
// here u can check your authentication and other activities.
})
możesz go również użyć w przypadku przekierowania żądania.
app.use('/', roting_object);
Oprogramowanie pośrednie to ogólny termin określający oprogramowanie, które służy do „sklejenia”, więc app.use to metoda konfiguracji oprogramowania pośredniego, na przykład: parsowanie i obsługa treści żądania: app.use (bodyParser.urlencoded ({Extended: true })); app.use (bodyParser.json ()); istnieje wiele programów pośrednich, których można użyć w aplikacji ekspresowej. Przeczytaj dokument: http://expressjs.com/en/guide/using-middleware.html
app.use stosuje określone oprogramowanie pośrednie do głównego stosu oprogramowania pośredniego aplikacji. Podczas dołączania oprogramowania pośredniego do głównego stosu aplikacji kolejność załączników ma znaczenie; jeśli dołączasz oprogramowanie pośrednie A przed oprogramowaniem pośrednim B, oprogramowanie pośrednie A zawsze będzie uruchamiane jako pierwsze. Możesz określić ścieżkę, dla której ma zastosowanie określone oprogramowanie pośrednie. W poniższym przykładzie „witaj świecie” zawsze będzie rejestrowany przed „szczęśliwymi świętami”.
const express = require('express')
const app = express()
app.use(function(req, res, next) {
console.log('hello world')
next()
})
app.use(function(req, res, next) {
console.log('happy holidays')
next()
})
To pozwala na użycie dowolnego middleware ( czytaj więcej ), jak body_parser
, CORS
itp Middleware może dokonać zmian request
i response
obiektów. Może również wykonać fragment kodu.
Możesz także utworzyć własną funkcję oprogramowania pośredniego
app.use( function(req, res, next) {
// your code
next();
})
Zawiera ona trzy parametry req
, res
, next
można go również używać do uwierzytelniania i walidacji params wejściowych, aby utrzymać swój kontroler czyste.
next()
służy do przejścia do następnego oprogramowania pośredniego lub trasy.
Możesz wysłać odpowiedź z oprogramowania pośredniego
Powiązanie oprogramowania pośredniego na poziomie aplikacji z instancją obiektu aplikacji za pomocą funkcji app.use () i app.METHOD (), gdzie METHOD to metoda HTTP żądania obsługiwanego przez funkcję oprogramowania pośredniego (takiego jak GET, PUT lub POST) małymi literami.
W skrócie app.use () obsługuje wszystkie typy żądań [np. Get, post, ...], więc jest najczęściej używany do konfiguracji oprogramowania pośredniego. lub może być używany, gdy trasy i funkcje są rozdzielone
przykład:
app.use("/test",functionName)
a nazwa_funkcji znajduje się w innym pliku
app.use()
jest metodą oprogramowania pośredniego.
Metoda oprogramowania pośredniego przypomina przechwytywanie w Javie, ta metoda zawsze wykonuje się dla wszystkich żądań.
Cel i użycie oprogramowania pośredniego: -
app.use
jest tworzony przez express (framework pośredni nodejs)
app.use służy do wykonywania dowolnego zapytania w procesie inicjowania server.js
(węzeł)
var app = wymagany („ekspresowy”);
więc w zasadzie funkcja app.use wywoływana jest przy każdym uruchomieniu serwera
app.use(bodyparser.json())
app.use to oprogramowanie pośrednie na poziomie aplikacji
Powiązanie oprogramowania pośredniego na poziomie aplikacji z instancją obiektu aplikacji za pomocą funkcji app.use () i app.METHOD (), gdzie METHOD to metoda HTTP żądania obsługiwanego przez funkcję oprogramowania pośredniego (takiego jak GET, PUT lub POST) małymi literami.
możesz użyć do sprawdzenia wszystkich żądań, na przykład chcesz sprawdzić token / token dostępu, musisz napisać oprogramowanie pośrednie za pomocą app.use, aby sprawdzić token w żądaniu.
Ten przykład pokazuje funkcję oprogramowania pośredniego bez ścieżki montowania. Funkcja jest wykonywana za każdym razem, gdy aplikacja odbierze żądanie.
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
referencja z https://expressjs.com/en/guide/using-middleware.html
app.use (ścieżka, oprogramowanie pośrednie) służy do wywoływania funkcji oprogramowania pośredniego, które należy wywołać, zanim trasa zostanie trafiona dla odpowiedniej ścieżki. Za pomocą aplikacji można wywołać wiele funkcji oprogramowania pośredniego.
app.use ('/ fetch', enforceAuthentication) -> oprogramowanie pośrednie enforceAuthentication fn zostanie wywołane po otrzymaniu żądania zaczynającego się od '/ fetch' . Może to być / fetch / users , / fetch / ids / {id} itp
Niektóre funkcje oprogramowania pośredniego mogą wymagać wywołania niezależnie od żądania. W takich przypadkach ścieżka nie jest określona, a ponieważ domyślną ścieżką jest / i każde żądanie zaczyna się od / , ta funkcja oprogramowania pośredniego zostanie wywołana dla wszystkich żądań.
app.use (() => {// Zainicjuj wspólną usługę})
fn next () należy wywołać w ramach każdej funkcji oprogramowania pośredniego, gdy wiele funkcji oprogramowania pośredniego jest przekazywanych do app.use , w przeciwnym razie następna funkcja oprogramowania pośredniego nie zostanie wywołana.
odniesienie: http://expressjs.com/en/api.html#app.use
Uwaga: dokumentacja mówi, że możemy ominąć funkcje oprogramowania pośredniego następujące po bieżącej, wywołując next ('route') w ramach bieżącej funkcji oprogramowania pośredniego, ale ta technika nie działała dla mnie w app.use, ale działała z app. METODA jak poniżej . Więc fn1 i fn2 zostały wywołane, ale nie fn3.
app.get('/fetch', function fn1(req, res, next) {
console.log("First middleware function called");
next();
},
function fn2(req, res, next) {
console.log("Second middleware function called");
next("route");
},
function fn3(req, res, next) {
console.log("Third middleware function will not be called");
next();
})