Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

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
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) => {
 
Odpovedať
26.4.2019 18:28
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.

 
Odpovedať
26.4.2019 18:38
Avatar
jindrich.jokel:15.5.2019 13:50

super clanky bruh, planuje i nejake dalsi pokracovani?

 
Odpovedať
15.5.2019 13:50
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

 
Odpovedať
5.8.2019 12:38
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é 10.9.2019 15:03
 
Odpovedať
10.9.2019 15:03
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.

 
Odpovedať
29.6.2020 9:07
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...

 
Odpovedať
29.6.2020 10:12
Avatar
Karel Paulík:29.6.2020 10:48

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

 
Odpovedať
29.6.2020 10:48
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);
}
 
Odpovedať
10.9.2020 15:59
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é 23.9.2020 10:21
Odpovedať
23.9.2020 10:20
Věř, běž a dokážeš!
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.

Zatiaľ nikto nevložil komentár - buď prvý!