Tento dokument môže byť v porovnaní s dokumentáciou v angličtine zastaralý. Aktuálne informácie nájdete v dokumentácii v angličtine.

Tvorba middleware pre použitie v Express aplikáciách

Prehľad

Middleware funkcie sú funkcie, ktoré majú prístup k request objektu (req), response objektu (res) a nasledujúcej middleware funkcii v request-response cykle aplikácie. Nasledujúca middleware funkcia v poradí je bežne označovaná premennou next.

Middleware funkcie dokážu vykonávať nasledujúce úlohy:

Ak aktuálna middleware funkcia neukončuje request-response cyklus, musí posunúť obsluhu nasledujúcej middleware funkcii vyvolaním next(). V opačnom prípade zostane request ‘visieť’.

Nasledujúci diagram ukazuje jednotlivé časti volania middleware funkcie:

HTTP metóda pre ktorú je middleware funkcia aplikovateľná.
Cesta (route) pre ktorú je middleware funkcia aplikovateľná.
Middleware funkcia.
Callback argument k middleware funkcii, nazvaný "next" podľa konvencie.
HTTP response argument k middleware funkcii, nazvaný "res" podľa konvencie.
HTTP request argument k middleware funkcii, nazvaný "req" podľa konvencie.

Príklad

Tu je príklad jednoduchej “Hello World” Express aplikácie. Zvyšná časť tohto článku definuje a pridáva do aplikácie dve middleware funkcie: jedna nazvaná myLogger ktorá vypíše jednoduchú log message a druhá nazvaná requestTime ktorá vypíše timestamp HTTP requestu.


var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Middleware funkcia myLogger

Tu je príklad jednoduchej middleware funkcie nazvanej “myLogger”. Táto funkcia len vypíše “LOGGED”, vždy keď aplikácia odchytí request. Middleware funkcia je priradená premennej nazvanej myLogger.


var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

Všimnite si volanie next() metódy hore. Zavolanie tejto funkcie vyvolá ďalší middleware v aplikácii. Funkcia next() nie je súčasťou Node.js či Express API, ale je tretím argumentom s ktorým je middleware funkcia vyvolaná. Funkcia next() môže byť nazvaná hocijako, ale podľa konvencie sa zvykne nazývať vždy “next”. Aby ste predišli zmätkom používajte túto konvenciu.

Pre načítanie middleware funkcie zavolajte app.use(), prostredníctvom ktorej ho špecifikujete. Nasledujúci kód načíta myLogger middleware funkciu ešte pred route definíciou hlavnej cesty aplikácie (/).


var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Vždy keď aplikácia obdrží request požiadavku, vypíše do konzoly správu “LOGGED”.

Poradie načítania middleware-ov je dôležité: middleware funkcie, ktoré sú načítane prvé, sú aj ako prvé vyvolané.

Ak by myLogger bol načítaný až za definíciou route pre hlavnú stránku aplikácie, nikdy by ho request nedosiahol a aplikácia by nevypísala “LOGGED”, pretože route handler ukončí request-response cyklus.

Táto myLogger middleware funkcia len vypisuje správu a posunie spracovanie ďalšej middleware funkcii v poradí zavolaním funkcie next().

Middleware funkcia requestTime

Ďalej vytvoríme middleware funkciu s názvom “requestTime” a ktorá pridáva requestTime atribút na request objekt.


var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

Aplikácia teraz používa requestTime middleware funkciu. Taktiež callback funkcia pre obsluhu route hlavnej stránky aplikácie používa atribút, ktorý táto middleware funkcia pridala na req (request objekt).


var express = require('express');
var app = express();

var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

app.use(requestTime);

app.get('/', function (req, res) {
  var responseText = 'Hello World!
'; responseText += 'Requested at: ' + req.requestTime + ''; res.send(responseText); }); app.listen(3000);

Po vykonaní requestu na hlavnú stránku aplikácie sa zobrazí v prehliadači timestamp vášho requestu.

Keďže máte prístup k request a response objektu, ďalšej middleware funkcii v poradí a celému Node.js API, možnosti middleware funkcií sú nekonečné.

Pre viac informácií ohľadom Express middleware si pozrite: Použitie Express middleware.