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.
Express je webový framework s minimálnou vlastnou funkcionalitou: Express aplikácia je v podstate séria volaní middleware funkcií.
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ť’.
Express aplikácia môže použiť nasledovné typy middleware funkcií:
Application-level a router-level middleware môžete načítať s voliteľnou cestou (path-om). Môžete taktiež načítať skupinu middleware funkcií dohromady, čím vytvoríte sub-stack middleware systém na danej ceste.
Pripojte application-level middleware k inštancii app objektu použitím app.use()
a app.METHOD()
funkcií, kde METHOD
je typicky HTTP metóda requestu, ktorý mddleware funkcia handluje (ako napr. GET, PUT, či POST) zapísaná v lowercase formáte.
Nasledujúci príklad ukazuje middleware funkciu, ktorá nie je pripojená na žiaden path. Funkcia bude vykonaná vždy, keď aplikácia obdrží request.
var app = express();
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
Nasledujúci príklad ukazuje middleware funkciu pripojenú na ceste /user/:id
. Funkcia bude vykonaná vždy, keď aplikácia održí request na /user/:id
a to bez ohľadu na typ použitej HTTP metódy.
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
Nasledujúci príklad ukazuje route a jej handler funkciu (middleware systém). Táto funkcia handluje GET requesty na ceste /user/:id
.
app.get('/user/:id', function (req, res, next) {
res.send('USER');
});
Tu je príklad načítania skupiny middleware funkcií pripojených na konkrétnu cesty. Príklad ilustruje sub-stack middleware, ktorý vypíše info o requeste pre všetky typy HTTP requestov vykonaných na /user/:id
.
app.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
Route handlery dovoľujú definovať viacero route-ov pre jednu cestu. Nasledujúci príklad definuje dva routy pre GET requesty na ceste /user/:id
. Definovanie druhého route nespôsobí žiadne problémy, ale ani sa nikdy nezavolá, pretože prvý route ukončí request-response cyklus.
Tento príklad zobrazuje middleware sub-stack ktorý handluje GET requesty na ceste /user/:id
.
app.get('/user/:id', function (req, res, next) {
console.log('ID:', req.params.id);
next();
}, function (req, res, next) {
res.send('User Info');
});
// handler for the /user/:id path, which prints the user ID
app.get('/user/:id', function (req, res, next) {
res.end(req.params.id);
});
Ak chcete preskočiť zostávajúce middleware funkcie z router middleware stack-u, zavolajte next('route')
čím posuniete obsluhu ďalšiemu route.
POZNÁMKA: next('route')
zafunguje iba v takých middleware funkciách, ktoré boli načítané pomocou app.METHOD()
alebo router.METHOD()
funkcií.
Tento príklad zobrazuje middleware sub-stack, ktorý handluje GET requesty na ceste /user/:id
.
app.get('/user/:id', function (req, res, next) {
// if the user ID is 0, skip to the next route
if (req.params.id == 0) next('route');
// otherwise pass the control to the next middleware function in this stack
else next(); //
}, function (req, res, next) {
// render a regular page
res.render('regular');
});
// handler for the /user/:id path, which renders a special page
app.get('/user/:id', function (req, res, next) {
res.render('special');
});
Router-level middleware funguje rovnakým spôsobom ako application-level middleware, avšak je pripojený k express.Router()
inštancii.
var router = express.Router();
Router-level middleware načítate pomocou router.use()
a router.METHOD()
funkcií.
Nasledujúci príklad replikuje vyššie zobrazený application-level middleware použitím router-level middlewaru:
var app = express();
var router = express.Router();
// a middleware function with no mount path. This code is executed for every request to the router
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// a middleware sub-stack shows request info for any type of HTTP request to the /user/:id path
router.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// a middleware sub-stack that handles GET requests to the /user/:id path
router.get('/user/:id', function (req, res, next) {
// if the user ID is 0, skip to the next router
if (req.params.id == 0) next('route');
// otherwise pass control to the next middleware function in this stack
else next(); //
}, function (req, res, next) {
// render a regular page
res.render('regular');
});
// handler for the /user/:id path, which renders a special page
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
});
// mount the router on the app
app.use('/', router);
Error-handling middleware príjma vždy štyri argumenty. Aby bolo možné identifikovať error-handling middleware funkciu, musíte jej definovať vždy štyri argumenty. Musíte ho definovať aj v situácii, kedy nepotrebujete použiť next
objekt, aby ste dodržali dohodnutú signatúru. V opačnom prípade bude next
objekt interpretovaný ako bežný middleware, ktorý nedokáže handlovať errory.
Error-handling middleware funkcie sa definujú rovnako ako ostatné middleware funkcie, len majú štyri argumenty namiesto troch, špecificky podľa signatúry (err, req, res, next)
:
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
Pre viac informácií ohľadom error-handling middlewarov si pozrite sekciu: Error handling.
Express počnúc od verzie 4.x nie je závislý na Connect module. Okrem výnimky express.static
, všetky predošlé middleware funkcie pôvodne obsiahnuté v Express sú teraz samostatné moduly. Zoznam middleware funkcií si pozrite tu.
Jediným vstavaným middlewarom v Express je express.static
funkcia. Tento middleware je založený na serve-static module a je zodpovedný za servovanie statických assetov ako HTML súbory, obráky atď.
Signatúra tejto funkcie je:
express.static(root, [options])
Parameter root
špecifikuje hlavný adresár z ktorého bude statický obsah servovaný.
Informácie ohľadom options
parametra ako i ďalšie detaily ohľadom tohto middleware nájdete tu: express.static.
Tu je príklad použitia express.static
middleware funkcie s rôznou konfiguráciou options objektu:
var options = {
dotfiles: 'ignore',
etag: false,
extensions: ['htm', 'html'],
index: false,
maxAge: '1d',
redirect: false,
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now());
}
}
app.use(express.static('public', options));
Môžete nastaviť aj viac ako jeden priečinok so statickým obsahom:
app.use(express.static('public'));
app.use(express.static('uploads'));
app.use(express.static('files'));
Pre viac detailov ohľadom serve-static
funkcie a jej možnostiach si pozrite dokumentáciu k serve-static modulu.
V Express aplikácii možete využiť taktiež third-party middleware funkcionalitu.
Nainštalujte požadovaný Node.js modul a načítajte ho do aplikácie ako aplikačný, či router middleware.
Nasledujúci príklad demonštruje inštaláciu a načítanie middleware funkcie cookie-parser
slúžiacej na prácu s cookies.
$ npm install cookie-parser
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// load the cookie-parsing middleware
app.use(cookieParser());
Čiastočný zoznam bežne používaných third-party middleware funkcií pre Express nájdete v sekcii: Third-party middleware.