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.

Ôťľ

Routing

Routing definuje tzv. koncov├ę body aplik├ície (URI) a sp├┤sob, ak├Żm odpovedaj├║ na requesty klientov. Z├íkladn├ę inform├ície o routing-u sa dozviete v sekcii Z├íkladn├Ż routing.

Tu je pr├şklad, ako zadefinova┼ą z├íkladn├Ż routing.


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

// respond with "hello world" when a GET request is made to the homepage
app.get('/', function(req, res) {
  res.send('hello world');
});

Route met├│dy

Route metóda je odvodená z niektorej HTTP metódy a pripojená k inštancii express triedy.

Nasleduj├║ci k├│d je uk├í┼żkou defin├şcie routing-u pre GET a POST met├│dy hlavnej str├ínky aplik├ície.


// GET method route
app.get('/', function (req, res) {
  res.send('GET request to the homepage');
});

// POST method route
app.post('/', function (req, res) {
  res.send('POST request to the homepage');
});

Express podporuje tieto routing metódy korešpondujúce k HTTP metódam: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search a connect.

Tie routing met├│dy, ktor├Żch n├ízov nie je validn├Żm n├ízvom pre JavaScript premenn├║, zapisujte pomocou z├ítvorkovej not├ície. Napr.: app['m-search']('/', function ...

Existuje ┼ípeci├ílna routing met├│da app.all(), ktor├í nie je odvoden├í zo ┼żiadnej HTTP met├│dy. T├íto met├│da sa pou┼ż├şva ako middleware funkcia pre konkr├ętny koncov├Ż bod a v┼íetky jej request met├│dy.

Na nasleduj├║com pr├şklade je uk├í┼żka handler funkcie, ktor├í bude vykonan├í pri requeste na ÔÇť/secretÔÇŁ bez oh─żadu nato, ─Źi bude pou┼żit├í GET, POST, PUT, DELETE, alebo ak├íko─żvek in├í HTTP request met├│da podporovan├í http modulom.


app.all('/secret', function (req, res, next) {
  console.log('Accessing the secret section ...');
  next(); // pass control to the next handler
});

Route cesty

Route cesty (route paths) definuj├║ v kombin├ícii s request met├│dami koncov├ę body, vo─Źi ktor├Żm je mo┼żn├ę vykona┼ą request. Route cesty je mo┼żn├ę definova┼ą ako stringy, stringov├ę patterny, alebo ako regul├írne v├Żrazy.

Express pou┼ż├şva pre sp├írovanie (matching) route cesty npm modul path-to-regexp; pre v┼íetky mo┼żnosti defin├şcie route ciest si pozrite dokument├íciu k path-to-regexp modulu. Express Route Tester je u┼żito─Źn├Ż n├ístroj pre testovanie z├íkladn├Żch Express route ciest, hoci nepodporuje pattern matching.

Query stringy nie s├║ s├║─Źas┼ąou route ciest.

Tu je nieko─żko pr├şkladov route ciest na z├íklade stringov.

T├íto route cesta sa sp├íruje s requestom na hlavn├Ż route, /.


app.get('/', function (req, res) {
  res.send('root');
});

Táto route cesta sa spáruje s requestom na /about.


app.get('/about', function (req, res) {
  res.send('about');
});

Táto route cesta sa spáruje s requestom na /random.text.


app.get('/random.text', function (req, res) {
  res.send('random.text');
});

Tu je nieko─żko pr├şkladov route ciest na z├íklade stringov├Żch patternov.

Táto route cesta sa spáruje s requestom acd a abcd.


app.get('/ab?cd', function(req, res) {
  res.send('ab?cd');
});

T├íto route cesta sa sp├íruje s requestom abcd, abbcd, abbbcd, at─Ć.


app.get('/ab+cd', function(req, res) {
  res.send('ab+cd');
});

T├íto route cesta sa sp├íruje s requestom abcd, abxcd, abRANDOMcd, ab123cd, at─Ć.


app.get('/ab*cd', function(req, res) {
  res.send('ab*cd');
});

Táto route cesta sa spáruje s requestom /abe a /abcde.


app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e');
});

Znaky ?, +, *, a () s├║ podmno┼żinami ich regul├írnych v├Żrazov. Poml─Źka (-) a bodka (.) sa reprezentuj├║ ako text.

Pr├şklady defin├şci├ş route ciest s vyu┼żit├şm regul├írnych v├Żrazov:

T├íto route cesta bude sp├írovan├í s ka┼żd├Żm requestom obsahuj├║cim ÔÇťaÔÇŁ.


app.get(/a/, function(req, res) {
  res.send('/a/');
});

T├íto route cesta sa sp├íruje s requestom butterfly a dragonfly, ale nie butterflyman, dragonfly man, at─Ć.


app.get(/.*fly$/, function(req, res) {
  res.send('/.*fly$/');
});

Route handler

Pre spracovanie requestu je mo┼żn├ę zadefinova┼ą viacero callback funkci├ş spr├ívaj├║cich sa ako middleware. Jedinou v├Żnimkou je, ┼że tieto callback-y m├┤┼żu sam├ę vyvola┼ą next('route') a tak vynecha┼ą zost├ívaj├║ce defin├şcie callback-ov. Tento mechanizmus m├┤┼żete pou┼żi┼ą k stanoveniu podmienok spracovania a n├ísledne potom ÔÇťodovzda┼ąÔÇŁ riadenie ─Ćal┼í├şm route defin├şci├ím v pr├şpade, ┼że nie je d├┤vod ho ─Ćalej spracov├íva┼ą v aktu├ílnej route defin├şcii.

Route handler m├┤┼że by┼ą definovan├Ż ako funkcia, pole funkci├ş ─Źi kombin├ícia oboch, ako na nasleduj├║cich pr├şkladoch.

Jedna callback funkcia pre obsluhu spracovania:


app.get('/example/a', function (req, res) {
  res.send('Hello from A!');
});

M├┤┼żete pou┼żi┼ą aj viac ako jednu callback funkciu (nezabudnite ┼ípecifikova┼ą next objekt). Napr├şklad:


app.get('/example/b', function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from B!');
});

M├┤┼żete pou┼żi┼ą aj pole callback funkci├ş. Napr.:


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

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

var cb2 = function (req, res) {
  res.send('Hello from C!');
}

app.get('/example/c', [cb0, cb1, cb2]);

Tu je uk├í┼żka kombin├ícia nez├ívisl├Żch funkci├ş a po─ża funkci├ş:


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

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

app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});

Response met├│dy

Met├│dy response objektu (res) v nasleduj├║cej tabu─żke dok├í┼żu odosla┼ą odpove┼ą klientovi a ukon─Źi┼ą request-response cyklus. Ak ┼żiadna z t├Żchto met├│d nebude zavolan├í z route handler-a, request klienta zostane ÔÇťvisie┼ąÔÇŁ nespracovan├Ż.

Method Description
res.download() Pon├║kne s├║bor na stianutie.
res.end() Ukon─Ź├ş proces odpovede.
res.json() Odo┼íle odpove─Ć ako JSON.
res.jsonp() Odo┼íle JSON odpove─Ć s podporou JSONP.
res.redirect() Presmeruje request.
res.render() Vyrendruje view template.
res.send() Odo┼íle odpove─Ć r├┤zneho typu.
res.sendFile() Odošle súbor ako octet stream.
res.sendStatus() Nastav├ş status k├│d odpovede a odo┼íle jej textov├║ reprezent├íciu ako telo odpovede.

app.route()

Pomocou app.route() dok├í┼żete vytvori┼ą zre┼ąazite─żn├ę route handlery pre konkr├ętnu route cestu. Preto┼że je route cesta ┼ípecifikovan├í na jednom mieste, tvorba tak├Żchto routes je u┼żito─Źn├í a zni┼żuje redundanciu a preklepy. Pre viac inform├íci├ş o pou┼żit├ş route pozrite: Router() dokument├íciu.

Tu je pr├şklad zre┼ąazenia route handlerov definovan├Żch pomocou app.route().


app.route('/book')
  .get(function(req, res) {
    res.send('Get a random book');
  })
  .post(function(req, res) {
    res.send('Add a book');
  })
  .put(function(req, res) {
    res.send('Update the book');
  });

express.Router

Ak chcete vytvori┼ą modul├írne a zre┼ąaziteln├ę route handlery pou┼żite express.Router triedu. Router in┼ítancia je kompletn├Ż middleware a routing syst├ęm; z tohto d├┤vodu sa ─Źasto ozna─Źuje ako ÔÇťmini-appÔÇŁ.

Nasleduj├║ci pr├şklad demon┼ítruje vytvorenie router modulu, na─Ź├ştanie middleware funkcie, ┼ípecifikuje nieko─żko route defin├şci├ş a ukazuje pripojenie router modulu na cestu (path) v hlavnej aplik├ícii.

V prie─Źinku aplik├ície vytvorte router s├║bor nazvan├Ż birds.js s tak├Żmto obsahom:


var express = require('express');
var router = express.Router();

// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});
// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;

N├ísledne na─Ź├ştajte tento router modul do aplik├ície:


var birds = require('./birds');
...
app.use('/birds', birds);

Aplik├ícia bude teraz schopn├í obsl├║┼żi┼ą prich├ídzaj├║ce po┼żiadavky na ceste /birds a /birds/about, a taktie┼ż vyvola┼ą timeLog middleware funkciu, ktor├í je ┼ípecifick├í pre tento route.