如何发送从文件读取的数据作为 NodeJS 中快速路由的响应?

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

我在本地文件夹中有一个 JSON 文件,其结构如下。

{
   license: "abcd",
   name: "abcd",

   data: [
      Array of JSON Objects ....
   ]
}

我想访问对象中的数据数组并将其作为来自快速路由的响应发送 这是我试过的。

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"));

当我在快速路由函数外记录它时显示正确 json,但在函数内响应是 [object Object],状态代码为 500(内部服务器错误)。

我也尝试了异步方法

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);
    });
    
});

但我得到与 [object Object] 相同的响应和状态代码 500。 我试过 res.send(JSON.stringify(jsonData)) 但没有用。 如何使用 Express 将我从文件中获取的 json 数据发送到前端? 顺便说一句,我正在为此使用 TypeScript。

如果你想在你的快速服务器和客户端之间发送一个 json 对象,你需要通过 res.json(obj) 发送数据,其中 obj 必须明确地是一个 JSON对象(不能是 JSON 对象的数组)。你可以做的只是发送数组,只需将你的 jsonData 数组包裹在括号对中就可以了。

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

这一行

app.get("/getJsonData", (err, res) => 

err 不是错误,它的请求应该是:

app.get("/getJsonData", (req, res) => {
    res.send(JSON.stringify(jsonData));
});

它的字面意思是 express.js 的示例 Hello world 站点,在那里你会看到他们使用 req

https://expressjs.com/de/starter/hello-world.html

你总是得到 500 错误的原因是因为 err,显然是请求,总是真实的

你也不需要对它进行字符串化,你可以这样做 res.json(jsonData)