Javascript fetch miért csinálja ezt?
Json-server modul nál miért nem látja az összes szintet a json file ban? Ha van egy ilyen struktúrám {
"class1": {
"class2": {
"property": "value"
}
}
}
De csak a class1 re tudok belelépni. Sem az alatta sem a fölötte lévő gyökérből nem lehet adatokat lekérni.
A fetch nél http://localhost:3000/class1/class2 már nem jó mivel a class2 egy szinttel lejjebb van mint a class1 de a localhost:3000 sem jó mert az meg egyel feljebb van mint a class1.
Robot szerint minden jó működnie kéne.
De egy másik express modullal létrehozott szerver esetén sem lát semmit a kérés . 404 et dob. Egyedi útra ami nem mutat json filera is 404 et dob.
Get -vel kapod meg ezt a json app-ban?
Le van rendesen programozva, hogy melyik kérésre mit adjon vissza?
Milyen Json-server modult használsz?
Express routingot nézd át a doksiban, átláthatóan és egyszerűen levezeti, hogy tudod rábindelni az egyes endpointokat adott elérési címekre.
Csak get kéréseket próbálgatok. De szerintem a json formátumra való alakítással vagyok félrevezetve IA által.
Tisztázzunk valamit. A JSON.strignify() csomagolba be json stringgé az objektumokat??? ÉN Így tanultam. A JSON.parse() meg ezt alakítja vissza objektumokká.??? De nekem az IA azt molndja hogy a fecth kérésben mikor visszajön az anyag a legvégén csinájlak egy json.stringify t
fetch('/')
.then(response => response.json()) AKKOR EZ MIRE VALÓ?
.then(data => {
console.log(data);
return JSON.stringify(data); EZ MEG MI A LÓFSZNAK KELL IDE?
})
.then(text => {
console.log(text); // Szöveg kiírása
})
.catch(error => console.error('Hiba:', error));
Nem json parse val kéne visszaalakítani a csomagot?
Miért a túl oldalon alakítja át parse val a küldendő csomagot?
server3.get('/hello2', function (req, res) {
fs.readFile('./db/db1.json', (err, json) => {
let obj = JSON.parse(json); ITT
res.json(obj);
console.log('Hello, World!');
});
Faék egyszerűen megfogalmazva:
- Adatot string-ben küldünk, JSON.stringify function az objektum átalakítását végzi el nekünk
- Amikor fogadunk akkor szintén stringet kapunk, ezt kliens oldalon mi magunk alakítjuk vissza objektummá a JSON.parse segítségével
Ez szabvány.
Miért? That's the law :DD .. Amúgy azért, mert így csökkentjük a küldendő adatok méretét.
Amúgy erősen ajánlom az általad is felvázolt régi (.then/.catch) megoldás leváltását az új, async/await-re, sokkal átláthatóbb.
Kis segítség ezzel kapcsolatban: [link]
Nem teljesen értem mit szeretnél. A fetch kliens oldalra van, HTTP kliensként kéréseket tud küldeni a böngésző (vagy pl. microservice-jellegűen a server egy másiknak). Az express egy node.js-es modul, server oldalra, a bejövő HTTP kérések lekezelésére.
A JSON struktúrádban sem csináltál semmit, hogy rekurzív módon bejárd a URL-ben kapott útvonal alapján. Ami bejön a hello2-re, arra visszaadod a teljes json file-odat (amit valami miatt parse-olsz, aztán visszaküldesz ugyanúgy stringként), de a másik oldalon sem csinálsz semmit vele. Nem keresed ki az elemeit. A fetch-ed is a /-re megy, nem arra, amit írtál.
Én csak azt akarom kipróbálni hogy ha van egy json adatfájlom akkor annak az egész vagy egy adott út részét lekérem fetch el és konzolra kiiratom.
De akkor a példa szerint eleve hülyeség az hogy a fetch ben a return stringify ol ,mert éppen hogy itt kéne parse olnia a stringként megkapott adatot..?. De az AI ezt akarja csinálni a kérdésemre de én sem így tanultam és nem is működik így.
Ugye hogy a server oldalon a get handlerben kéne a let obj = JSON.parse(json); helyett stringify olni a json adatot mert itt küldi vissza a kliensemnek?
Tisztázzuk még hogy a json() függvény pontosan mire való mert annyi rémlik hogy ez csak a fetch nél használatos mert ez kezeli a json adatot ? De ugyebár ez nem alakít se stringify se parse ez csak felismeri hogy json tartalom érkezik e?
Az express modult csak elkeseredésemben vettem elő. Eredetileg json-server modulra írtam de ott se működik jól semmi ezért szűkítettem egy primitív pár soros kódra hogy lássam már hol van elcseszve az egész.
Ebben a rövid express serverben még odáig se jutottam el hogy egy json adatot kiolvassak hiába adtam meg a db/db.json elérési utat .Másikban meg se adtam json utat hanem csak egy visszaválasz consol.log hello word szöveget hogy lássam megtörténik e egyáltalán a válasz de nem történt meg.
Mert az eredeti problémám a json-server en meg az hogy ott meg csak akkor érkezett meg a válasz ha a fetch url címbe a localhost3000 után megadtam a json file első szintjén lévő valamelyik kulcsot. Hát nem ezt tanítják a videóban, elvileg ha csak a portszámig írod be az utat akkor is ki kéne listáznia az egész json filet amire mutat , és minden egyes szintnek az útját le kéne tudni kezelni 3000/clas1/class2 stb de a második szint már nem teljesül .Ezekre mind JSON file formátum hibát dob a 1 sor 1 oszlopába pedig a json file ok validáltak abban hiba nincs.
Ha a böngésző fejlécébe írogatom be hogy 3000/class1/class2 stb ott se látja pedig működik a port .
A kliens és a szerver kód is AI ellenőrizte szerinte is működnie kéne a fetch kéréseknek bármilyen útra.
Most először az express szerverrel akarom elérni azt hogy válaszoljon utána tesztelni hogy az utakra is helyesen reagál.
A / kérés csak itt tér el mert idegembe azt másoltam be ,programba javítva van.
Egy ötletem van hogy miért nem reagál helyesen az utakra a json-server, nem lehet hogy ebben a sorban a végén az a join okozza ?
const router1 = jsonServer.router(path.join(__dirname, "db1.json"));
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!