使用JS将JSON文件发送到Express服务器

wnrlj8wa  于 2023-03-04  发布在  其他
关注(0)|答案(5)|浏览(222)

我对JS还很陌生,我有一个JSON文件需要发送到我的服务器(Express),然后我可以解析它的内容,并在我构建的Web应用程序中使用它。
这是我现在所拥有的:

  • 名为data.json的JSON文件
  • 在本地主机上运行的Express服务器设置
  • 一些糟糕代码:
app.get('/search', function (req, res) {
     res.header("Content-Type",'application/json');
     res.send(JSON.stringify({/data.json/}));
    });

在上面的代码中,我只是尝试将文件发送到localhost:3000/search并查看我的JSON文件,但当我转到该路径时,收到的只是{}。
任何帮助都将不胜感激。提前感谢。
干杯,西奥
data.json的示例片段:

[{
    "name": "Il Brigante",
    "rating": "5.0",
    "match": "87",
    "cuisine": "Italian",
    "imageUrl": "/image-0.png"
}, {
    "name": "Giardino Doro Ristorante",
    "rating": "5.0",
    "match": "87",
    "cuisine": "Italian",
    "imageUrl": "/image-1.png"
}]
irlmq6kh

irlmq6kh1#

只需确保您需要正确的文件作为变量,然后将该变量传递给您的res.send!

const data = require('/path/to/data.json')

app.get('/search', function (req, res) {
  res.header("Content-Type",'application/json');
  res.send(JSON.stringify(data));
})

另外,我个人更喜欢使用res.json,因为它会自动设置标题。

app.get('/search', function (req, res) {
  res.json(data);
})

编辑:
这种方法的缺点是JSON文件只读入内存一次,如果您不想将文件读入内存,或者您打算在某个时候修改磁盘上的JSON,那么您应该看到Ian's Answer

bkkx9g8r

bkkx9g8r2#

另一个选项是使用sendFile并设置内容类型头。

app.get('/search', (req, res) => {
    res.header("Content-Type",'application/json');
    res.sendFile(path.join(__dirname, 'file_name.json'));
})

代码假设文件和JS代码在同一个目录下,answer解释了这是如何工作的。

2nbm6dog

2nbm6dog3#

尝试res.json(data.json)而不是res.send(...

2cmtqfgy

2cmtqfgy4#

因为__dirname解析为脚本运行的位置,所以我更喜欢使用path.resolve()

var path = require('path');

app.get('/search', (req, res) => {
    res.header("Content-Type",'application/json');
    res.sendFile(path.resolve('search/data.json'));
})
vptzau2j

vptzau2j5#

先读取文件,然后将JSON发送到客户端。

fs.readFile('file_name.json', 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
  res.send(JSON.stringify(obj));
});

相关问题