I have a JSON file in local folder with a structure like this.
{
license: "abcd",
name: "abcd",
data: [
Array of JSON Objects ....
]
}
I want to access the data array in the Object and send it as response from express route This is what I tried.
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"));
It shows correct json when I log it outside the express route function, but inside the function the response is [object Object] with status code of 500 (Internal Server Error).
I tried the asynchronous method also
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);
});
});
but I get the same response as [object Object] and status code 500.
I tried res.send(JSON.stringify(jsonData))
but no use.
How can I send the json data that I get from file to frontend using Express??
btw I am using TypeScript for this.
CodePudding user response:
This line
app.get("/getJsonData", (err, res) =>
The err
is not an error, its the request it should be:
app.get("/getJsonData", (req, res) => {
res.send(JSON.stringify(jsonData));
});
Its literally at the example Hello world
site of express.js, there you will sees that they use req
https://expressjs.com/de/starter/hello-world.html
The reason why you always get an 500 error is because err
, wich is obviously the request, is always truthy
You also dont need to Stringify it, you could just do res.json(jsonData)
CodePudding user response:
If you want to send a json object between your express server and the client, you'll need to send the data via res.json(obj)
where obj must explicitly be a JSON object (can't be an array of JSON objects). What you can do to just send the array, is simply wrap your jsonData array inside a bracket pair and you are done.
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