NodeJS / Express: co to jest "app.użyć"?

W docs dla modułu NodeJS express przykładowy kod ma app.use(...).

Czym jest funkcja use i gdzie jest zdefiniowana?

Author: nbro, 2012-07-04

10 answers

Obiekt app jest tworzony przy tworzeniu serwera Express. Posiada middleware stos , który można dostosować w app.configure()(jest to obecnie przestarzałe w wersji 4.x) .

Aby skonfigurować oprogramowanie pośredniczące, możesz wywołać app.use(<specific_middleware_layer_here>) dla każdej warstwy middleware, którą chcesz dodać (może być ogólna dla wszystkich ścieżek, lub wyzwalana tylko na określonych ścieżkach obsługiwanych przez serwer), i doda się do stosu middleware Express. Middleware warstwy mogą być dodawane jeden po drugim w wielu wywołaniach use, lub nawet wszystkie jednocześnie w szeregu z jednym wywołaniem. Zobacz też use Dokumentacja Po Więcej Szczegółów.

Aby podać przykład pojęciowego zrozumienia oprogramowania pośredniczącego Express, oto, co mój stos middleware aplikacji (app.stos) wygląda tak jak podczas logowania obiektu mojej 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óre dodały te "warstwy" pośredniczące express do middleware stack. Zauważ, że trasy są puste, co oznacza, że kiedy dodałem te warstwy middleware, określiłem, że zostaną one uruchomione na dowolnej trasie. Jeśli dodam niestandardową warstwę middleware, która została uruchomiona tylko na ścieżce /user/:id, to będzie ona odzwierciedlona jako ciąg znaków w polu route tego obiektu warstwy middleware w wydruku stosu powyżej.

każda warstwa jest zasadniczo dodanie funkcji, która specjalnie obsługuje coś do przepływu przez middleware.

Np. poprzez dodanie bodyParser, zapewniasz, że twój serwer obsługuje przychodzące żądania za pośrednictwem oprogramowania pośredniczącego express . Więc, teraz parsowanie ciała przychodzących żądań jest częścią procedury, którą oprogramowanie pośredniczące wykonuje podczas obsługi przychodzących żądań - wszystko dlatego, że wywołałeś app.use(bodyParser).

 263
Author: chinnychinchin,
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
2017-02-14 00:00:25

use jest metodą konfiguracji oprogramowania pośredniego używanego przez trasy obiektu serwera Express HTTP. Metoda jest zdefiniowana jako część Connect , na której opiera się Express.

 38
Author: JohnnyHK,
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
2014-06-03 03:25:06

Każda aplikacja.use (middleware) jest wywoływane za każdym razem, gdy żądanie jest wysyłane do serwera.

 17
Author: Eugene Mercer,
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
2017-04-24 18:37:43

App.use () używana do montowania funkcji middleware lub mount do określonej ścieżki, funkcja middleware jest wykonywana, gdy ścieżka podstawowa jest zgodna.

Na przykład: jeśli korzystasz z aplikacji.use () w indexRouter.js, jak to:

//indexRouter.js

var adsRouter = require('./adsRouter.js');

module.exports = function(app) {
    app.use('/ads', adsRouter);
}

W powyższej aplikacji kodu.use () zamontuj ścieżkę na '/ ads ' do adsroutera.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 dla reklam - '/ ads / show' , a potem będzie działać zgodnie z controllerIndex.reklamy.showAd ().

App.use ([path], callback, [callback]): możemy dodać oddzwonienie na tym samym.

app.use('/test', function(req, res, next) {

  // write your callback code here.

    });
 14
Author: Shubham Verma,
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
2017-01-23 07:51:22

App.use () działa tak:

  1. Zdarzenie żądania wywołane NA instancji serwera HTTP węzła.
  2. express wykonuje część swojej wewnętrznej manipulacji z obiektem req.
  3. to jest kiedy express zaczyna robić rzeczy określone w aplikacji.użycie

Które bardzo proste.

I dopiero wtedy express zrobi resztę rzeczy jak routing.

 4
Author: Anton Stafeyev,
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
2017-07-17 08:58:32

App.use () działa jako oprogramowanie pośredniczące w aplikacjach express. W przeciwieństwie do aplikacji .get () i app.post () lub tak, możesz użyć aplikacji .use () bez podania adresu URL żądania. W takim przypadku robi to za każdym razem, bez względu na to, jaki adres URL został trafiony.

 4
Author: Omkar Mote,
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-05-24 12:23:59

In express if we import express z " express" i użyj app = express(); następnie aplikacja posiadająca wszystkie funkcje express

Jeśli używamy aplikacji.use ()

Z dowolną funkcją modułu / middleware do wykorzystania w całym projekcie express

 1
Author: saurabh kumar,
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
2017-09-10 14:07:29

Middleware to ogólne określenie oprogramowania, które służy do "sklejania" tak app.use jest metodą konfiguracji middleware, na przykład: aby parsować i obsługiwać treść żądania: app.use (bułg.urlencoded({ extended: true })); app.use (bułg.json()); istnieje wiele middleware można użyć w aplikacji express po prostu przeczytaj doc : http://expressjs.com/en/guide/using-middleware.html

 1
Author: user3432221,
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
2017-11-26 18:53:59

App.use stosuje określone oprogramowanie pośredniczące do głównego stosu oprogramowania pośredniczącego aplikacji. Podczas dołączania middleware do głównego stosu aplikacji, Kolejność załączników ma znaczenie; jeśli dołączysz middleware A przed middleware B, middleware A będzie zawsze uruchamiane jako pierwsze. Możesz określić ścieżkę, dla której ma zastosowanie określone oprogramowanie pośredniczące. W poniższym przykładzie "hello world" będzie zawsze zapisywane przed "happy holidays."

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()
})
 1
Author: Rubin bhandari,
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-05-23 11:42:48

Powiązać middleware poziomu aplikacji z instancją obiektu app za pomocą aplikacji.use() I app.Funkcje METHOD (), gdzie metoda jest metodą HTTP żądania obsługiwanego przez funkcję middleware (taką jak GET, PUT lub POST) małymi literami.

 0
Author: Rajeev Kumar Verma,
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
2017-08-23 11:52:17