Tengo un archivo JSON en una carpeta local con una estructura como esta.
{ license: "abcd", name: "abcd", data: [ Array of JSON Objects .... ] }Quiero acceder a la matriz de datos en el Objeto y enviarlo como respuesta desde la ruta expresa. Esto es lo que intenté.
import express from "express"; import fs from "fs"; import bodyParser from "body-parser"; var app = express(); app.use(bodyParser.json()); var fileData: string = fs.readFileSync("path to json file", { encoding: 'utf-8' }); var jsonData = JSON.parse(fileData).data; console.log(jsonData); app.get("/getJsonData", (err, res) => { if (err) throw err; res.send(JSON.stringify(jsonData)); }); app.listen("3001", () => console.log("listening at 3001"));Muestra el json correcto cuando lo registro fuera de la función de ruta rápida, pero dentro de la función la respuesta es [objeto Objeto] con el código de estado 500 (Error interno del servidor).
Probé el método asíncrono también
var app = express(); app.use(bodyParser.json()); app.get("/getJsonData", (err, res) => { if (err) throw err; fs.readFile("path to json file", (fileErr, result) => { if(fileErr) throw fileErr; var jsonData = JSON.parse(result.toString()).data; res.json(jsonData); }); }); pero obtengo la misma respuesta que [object Object] y el código de estado 500. Intenté res.send(JSON.stringify(jsonData)) pero no sirvió. ¿Cómo puedo enviar los datos json que obtengo del archivo a la interfaz usando Express? por cierto, estoy usando TypeScript para esto.
Esta línea
app.get("/getJsonData", (err, res) => El err no es un error, es la solicitud que debería ser:
app.get("/getJsonData", (req, res) => { res.send(JSON.stringify(jsonData)); }); Está literalmente en el ejemplo del sitio Hello world de express.js, allí verá que usan req
https://expressjs.com/de/starter/hola-mundo.html
La razón por la que siempre obtienes un error 500 es porque err , que obviamente es la solicitud, siempre es veraz.
Tampoco necesita Stringificarlo, solo puede hacer res.json(jsonData)
Si desea enviar un objeto json entre su servidor Express y el cliente, deberá enviar los datos a través de res.json(obj) donde obj debe ser explícitamente un objeto JSON (no puede ser una matriz de objetos JSON) . Lo que puede hacer para enviar la matriz es simplemente envolver su matriz jsonData dentro de un par de corchetes y listo.
let jsonData = JSON.parse(fileData).data; res.json({ jsonData }); //or if you dont understand the above use res.json({ jsonData: jsonData}) //which is equivalent to the above line