Kezdőoldal » Számítástechnika » Programozás » Json-server en egyedi útkezelő...

Json-server en egyedi útkezelő miért nem működik?

Figyelt kérdés

[link]


Ez a leírás szerint csinálom csak én POST kérést akarok mert adatokat akarok postolni és kiírni fájlba de ezt csak a szerver oldalon tehetem meg amihez egy egyedi handler kellene ami ezt a post kérést kezeli . Mert nem a json fájlba akarom visszaírni az adatokat hanem pont hogy onnan akarom kiszedni és fájlba írni.


A leírás szerint csak get kérésre van példa de a robot állítja hogy post ra is működnie kell . Még sem működik , 404 a kérés címe nem található.


Lehet egyáltalán post kérést küldeni így vagy félre vagyok már megint vezetve?


A fejlécben is mint fájlnév van megadva az útcím ami a /archiv de ez nem létezik mert én csak mint fantom hoztam létre ezt a címet azért hogy erre az útra érkezzen a post kérés mert ebben a függvényben írnám ki fájlba az adatokat.


Böngésző F12:


POST


scheme http

host localhost:3000

filename /archiv


(Aszinkron: EventHandlerNonNull)


Ez a szerveroldali js ben lévő egyedi útkezelő ami annyiban tér el a githubos példától hogy nem get hanem post. Robottal ezerszer köbefutottuk és elvileg működnie kell.


server1.post('/archiv', (req, res) => {

fs.writeFile('output.json', req.body, (err) => {

if (err) {

console.log(err);

res.status(500).send('Hiba történt a fájl írása közben.');

} else {

res.status(200).send('Az adatok sikeresen ki lettek írva a fájlba.');

}

});

})



#programozás #webfejlesztés #post fetch #aszinkron get
febr. 11. 12:48
1 2
 1/12 anonim ***** válasza:

A linkelt doksiban ezt írja:


// To handle POST, PUT and PATCH you need to use a body-parser

// You can use the one used by JSON Server

server.use(jsonServer.bodyParser)

server.use((req, res, next) => {

if (req.method === 'POST') {

req.body.createdAt = Date.now()

}

// Continue to JSON Server router

next()

})

febr. 11. 13:45
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:

Igen használva van a server.use(jsonServer.bodyParser) . Az utána lévő kódnak a robot szerint semmi köze az egyedi handleremhez az csak valami dátumot ad hozzá a post kéréshez.


Miért szerinted mire kell ez a createdAt ?

febr. 11. 15:58
 3/12 anonim ***** válasza:

A kódban amit bemásoltál nem látszott, hogy használod a server.use(jsonServer.bodyParser)-t


Szerintem próbáld ki, hogy amit idemásoltam kód, abban ezt:

req.body.createdAt = Date.now()

cseréled erre:

fs.writeFile('output.json', req.body, (err) => {


if (err) {


console.log(err);


res.status(500).send('Hiba történt a fájl írása közben.');


} else {


res.status(200).send('Az adatok sikeresen ki lettek írva a fájlba.');


}


});


De ennél okosabbat sajna nem tudok mondani

febr. 11. 16:15
Hasznos számodra ez a válasz?
 4/12 A kérdező kommentje:

Ez nem lesz jó mert nem az a célom hogy minden post kérésnél kiírja fájlba az adott postot hanem hogy egy /archiv útra küldött post nál írja ki az adatokat. Ezt pedig a /archiv handler callback függvényében kell végrehatjanom .


De nagyon úgy néz ki hogy csak get elni lehet úgyhogy ki kell talalálnom valami mást hogyan lehet json adatokat fájlba írni böngésző eseményre.

febr. 11. 20:53
 5/12 anonim ***** válasza:

Működnie kellene peddig.


Kimásoltam ezt a példát: [link]


Hozzáadtam ezt a kódot:

server.post('/action', (req, res) => {

res.jsonp("Hi")

});


Futtatom: node test.js


Lekérés:

$ curl -X POST localhost:3000/action 2>/dev/null | jq

"Hi"


Szóval ennek mennie kell. Hogy néz ki a teljes fileod?


Én 0.17.3 verzióval próbáltam, a legfrissebb alpha verzió az hibás és nem is működik

febr. 13. 17:30
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:

Működik az egyedi útkezelő a böngésző felé , küldi a get kéréseket.


Nem ez a probléma hanem hogy a szerver oldalon a (req, res) => függvényben lévő dolgokat nem hajtja végre .


Mert a robot szerint itt tudnám elsütni a fájlírást meg a törlést meg fetch kéréseket is a node-fetch modullal .

Muszáj itt csinálnom mivel a kliens oldali js ben nem engedélyezett a fájlírás modul .


A robotnak semmi ötlete nincs az alábbi kódban miért nem hajtódik végre a req res függvény ,még a console.log sem működik.


A robot végig express modulról beszél ,én meg json servert használok de szerintem a json serverben is express van .



const jsonServer = require("json-server");

const cors = require("cors");

const path = require("path");

const fs = require('fs');

const fetch = require('node-fetch');


// Első szerver létrehozása a 3000 es porton

const server1 = jsonServer.create();

const middlewares1 = jsonServer.defaults();


server1.use(cors());

server1.use(jsonServer.bodyParser);

server1.use(middlewares1);


server1.get('/archiv', (req, res) => {

fs.writeFile('output.json', JSON.stringify({ test: 'test' }), (err) => {

if (err) {

console.log(err);

res.status(500).send('Hiba történt a fájl írása közben.');

} else {

res.status(200).send('Az adatok sikeresen ki lettek írva a fájlba.');

}

});

});


Ja itt már az írónak egy test objektum lett megadva hogy tovább szűkítsük a hibakört de így sem jött létre a fájl.

febr. 13. 20:33
 7/12 A kérdező kommentje:

És lemaradt a folytatása a js nek .


const router1 = jsonServer.router(path.join(__dirname, "db1.json"));

server1.use(router1);


server1.listen(3000, () => {

console.log("Server is running at http://localhost:3000");

})

febr. 13. 20:42
 8/12 anonim ***** válasza:

Átírtam magamnak is:


server.get("/archiv", (req, res) => {

fs.writeFile("output.json", JSON.stringify({ test: "test" }), (err) => {

if (err) {

console.log(err);

res.status(500).send("Hiba történt a fájl írása közben.");

} else {

res.status(200).send("Az adatok sikeresen ki lettek írva a fájlba.");

}

});

});


És megy:

$ curl localhost:3000/archiv 2>/dev/null

Az adatok sikeresen ki lettek írva a fájlba.


Nem tudom miért get kérésel csináltad, de post kéréssel is ugyanúgy megy:

server.use(jsonServer.bodyParser);

server.post("/archiv", (req, res) => {

fs.writeFile("output.json", JSON.stringify(req.body), (err) => {

if (err) {

console.log(err);

res.status(500).send("Hiba történt a fájl írása közben.");

} else {

res.status(200).send("Az adatok sikeresen ki lettek írva a fájlba.");

}

});

});


$ curl -X POST -d '{"hello":1}' -H 'Content-Type: application/json' localhost:3000/archiv 2>/dev/null

Az adatok sikeresen ki lettek írva a fájlba.


És az output.json fájl tartalma:

{"hello":1}


Nem igazán látok benne hibát. Itt a teljes kód: [link]

febr. 14. 15:01
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:

Tegnap már csináltam külön egy express servert ,és kipróbáltam az express beimportálásával is de akkor is ugyan ez a helyzet , a kérés átmegy de a callback függvény nem fut le . Majd még próbálkozok.


Te ezt tisztán express serveren csináltad vagy közösen json-servert is tartalmazó js fájlban?

febr. 14. 20:25
 10/12 A kérdező kommentje:
A te verziódat kipróbálva meg lefut a callback de üres filet ír ki és nem látja a db.json fileomat így nem is tud mit kiírni ,de a teszt objektumot sem írja ki tehát nem csak az elérés lehet a gond.
febr. 14. 23:02
1 2

További 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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!