Express:作为响应发送JSON文件

7

我刚接触express。我使用express generators制作了一个简单的带有express后端的react前端,并且目前,我是这样发送JSON数据的:

var express = require("express");
var router = express.Router();

router.get("/", function(req, res, next) {
  var jsonData = {"name": "manav"};
  res.json(jsonData);
});

module.exports = router;

但是我如何发送来自JSON文件的数据呢? 我尝试在同一目录中创建一个JSON文件,并像这样发送它:res.json('./jsonFile'); 但它不起作用。 请问有人可以帮我吗?


可能是重复的问题,与https://stackoverflow.com/questions/31414673/sending-a-json-file-in-express相同。 - KARAN LAGALWAR
2个回答

11

你可以像这样做:

var hoteljsonFile = require("../data/hotel-data.json"); // path of your json file


router.get("/", function(req, res, next) {

  res.json(hoteljsonFile);
});

这个可以运行,但是如果JSON文件中的数据发生变化怎么办?即使我把require语句放在函数中,它也只会执行一次并将对象存储在缓存中,直到express服务器重新加载。 - sarius
1
这是我上述问题的解决方案。 - sarius

5

在你的代码中尝试以下方式读取json文件:

var fs = require('fs');
var path = require('path')

var usersFilePath = path.join(__dirname, 'users.min.json');
apiRouter.get('/users', function(req, res){
    var readable = fs.createReadStream(usersFilePath);
    readable.pipe(res);
});

这是我个人认为更好的答案。 - Taylor Ackley
1
但是这只是发送文本,即使您设置了Content-Type: application/json,它也不会将数据作为JSON发送。如何将其作为JSON发送,而不是文本? - user1944491
1
@user1944491 JSON是文本。这就是为什么创建JSON的方法被称为“stringify”的原因。 - Mig
1
@Mig JSON是文本,但它具有结构和必需的分隔符。 - user1944491
@user1944491 是的,但 Content-Type 是区分文本和 JSON 的唯一标识。或者说,它将其识别为 JSON。所以我不明白你的评论。发送可能不是问题所在。一旦您拥有正确的内容类型,客户端就有责任读取内容类型并相应地解析。大多数浏览器会自动执行此操作。如果您构建了一个 API,则必须检查内容类型并解析。没有所谓的“发送 JSON”。您能做的就是确保其格式良好,以便进行解析。 - Mig
@Mig “你所能做的就是确保它被格式化得很好,以便进行解析。”-- 这正是我一直在说的。 - user1944491

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接