Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 4. diel - Kompletné Restful API v Node.js

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Míla Skipper Moravec:26.4.2019 18:28

Stále jsem přemýšlel, proč mi nefunguje metoda POST. A odpověď je, že na tvým řádku máš

app.post('api/movies', (req, res) => {

ale má být

app.post('/api/movies', (req, res) => {
Avatar
Petr Sedláček
Tvůrce
Avatar
Odpovedá na Míla Skipper Moravec
Petr Sedláček:26.4.2019 18:38

Vidíš, díky!
Opravím to.

Avatar
jindrich.jokel:15.5.2019 13:50

super clanky bruh, planuje i nejake dalsi pokracovani?

Avatar
Lukáš Korel:5.8.2019 12:38

Jde nějak získat více parametrů při volání GET?, kdybych chtěl vracet objekt, jehož vyhledání závisí na 2 parametrech (pro jednoduchost výpočet obsahu obdélníku, API by bralo 2 parametry např. http://localhost:3000/…ngle/a=2,b=3 (nebo jak jinak to zapsat)

Děkuji za informaci

Avatar
Odpovedá na Lukáš Korel
Tomáš "chlastyml" Kacálek:10.9.2019 15:03

Ahoj Lukasi,
jednoducha odpoved: NE! :D

Slozitejsi popis: Zde se jedna o url adresu. Teoreticky muzes vytvorit routu, kde budes mit v ceste dva parametry timto zpusobem (oddelene pomoci / ):

app.get('/:first/:second', (req, res) => {
    console.log(req.params.first);
    console.log(req.params.second);
    //...

Ale doporucuji ti to nepouzivat! Ja vlastne nedoporucuji vubec cpat informace do url parametru.
**Proc? **
Nejdrive si musime vysvetlit, ze express funguje na principu prvni deklarace vyhrava. To znamena, ze kdyz definuji routu (napr.: pro status a odeslu 'OK')

router.get('/status', (req, res) => {
    res.send('OK');
});

pote nekde dal v kodu definuji routu se stejnou cestou napr.

router.get('/status', (req, res) => {
    res.send('KO');
});

Tak po zavolani teto routy se spusti vzdy ta prvni definovana (tj. vzdy se vrati 'OK');
Ale proc to vubec rikam:
Kdyz se definuje routa s promenym parametrem napr:

app.get('/api/movies/:id', (req, res) => {
    // some logic
});

a pod to definujes treba:

app.get('/api/movies/all', (req, res) => {
    // some logic
});

Tak pro tu all se ti nikdy nevykona. To by si je musel definovat opacne, nebo udelat neco takoveho:

app.get('/api/movies/:id', (req, res, next) => {
    if(req.params.id === 'all') {
        next();
    } else {
        // some logic
    }
});

ale to je na jine povidani! (takze s tim si nemusis delat hlavu pokud si na to jeste nenarazil. Jiank takhle nejak se pisou ty Middlewares).

Summary: Takze kazdym takovym url parametrem si zavres vetev pri vytvareni route path.


A ted konecne Reseni: To co ty urcite hledas jsou query params. Velice uzitecna vec! jsou to parametry za url adresou (od url oddelene otaznikem a mezi sebou oddelene carkou).
Priklad:

http://localhost:3000/path?param1=value1,param2=value2

a pri definici chovani routy:

router.get('/path', (req, res) => {
    // v promene req.query.param1 je shovane "value1"
    // v promene req.query.param2 je shovane "value2"
});

Tak doufam, ze jsem ti pomohl :) Kdyby neco ptej se :)

PS: jsem se nejak rozkecal xD

Editované
Avatar
Karel Paulík:29.6.2020 9:07

Když se požadavky posílají na stejnou adresu, jak server pozná co má udělat.
Např.
get: app.get('/api/mo­vies/:id'
delete: app.delete('/a­pi/movies/:id'
Jak server pozná, jestli má vrátit dotaz na film, nebo film smazat? Pokud by byl get např. app.get('/api/mo­vies_get/:id' a deleta např. app.delete('/a­pi/movies_del/:id' tak by to bylo jané, ale při stejné adrese ne.

Avatar
Radek Veverka
Tvůrce
Avatar
Odpovedá na Karel Paulík
Radek Veverka:29.6.2020 10:12

URL adresa není vše, co se serveru posílá. Hned začátek HTTP requestu obsahuje typ requestu - GET, POST, PUT, DELETE...

Avatar
Karel Paulík:29.6.2020 10:48

Jj, to jsem si neuvědomil. Díky

Avatar
Radek Myška
Člen
Avatar
Radek Myška:10.9.2020 15:59

od verze16 není Joi.validate() podporovano proto se musí opravit vytváření schema a volaní validate() přímo nad schema např takto:

function validateMovie(movie) {
  const schema = Joi.object({
    name: Joi.string().min(3).required(),
    year: Joi.number(),
  });

  return schema.validate(movie);
}
Avatar
David Koníček:23.9.2020 10:20

Tohle by bylo dobré, kdyby autor Petr Sedláček upravil, aby nebylo potřeba to hledat v komentářích.

Editované
Odpovedať
Věř, běž a dokážeš!
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 25.