How to send data read from file as response from an express route in NodeJS?

Issue

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.

Solution

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)

Answered By – bill.gates

Answer Checked By – Marilyn (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.