【问题标题】:Serving json from a file express js从文件 express js 提供 json
【发布时间】:2018-05-12 09:16:02
【问题描述】:

新手要表达,我有一个包含 db.json 文件的文件夹,它每 11 秒被一个新的 db.json 替换。让 express.js 服务它以便在 api 调用上显示新内容的最佳方式是什么?这是我目前所拥有的:

const express = require('express');
const router = express.Router();

router.get('/api/items', (req, res) => {
  let dbPath = require('./data/db.json');
  res.send(JSON.stringify(dbPath));

});

db.json 看起来像这样

[{"recordType": "E90", "count": "55", "space": "4" },
{"recordType": "A48", "count": "40", "space": "5" }, ....]

问题:下次调用 api 时我没有看到更新的值。

【问题讨论】:

  • 这应该适合你,不是吗?
  • 为什么 JSON 文件每 11 秒被替换一次?
  • 最好的方法是根本不在每个路由请求上加载文件。磁盘读/写通常很慢。你最好使用像 Redis / MongoDB 这样的数据库(取决于你的需要)。 Redis 或 MongoDB 等数据库将常用资产缓存在 RAM 中,因此您可以期望它更快。
  • @kentor express sendFile 已经使用流传输文件
  • 此设置无效。那么拥有数据库是唯一的选择吗?

标签: javascript json node.js rest express


【解决方案1】:

试试这个:

const fs = require('fs');

router.get('/api/items', (req, res) => {

    fs.readFile('./data/db.json', (err, json) => {
        let obj = JSON.parse(json);
        res.json(obj);
    });

});

希望对你有帮助

【讨论】:

  • 能否以任何方式发送内容而不是文件?
  • 是的,在这种情况下你可以使用JSON.parse,我为你更新了答案
  • 这只是我添加的“__dirname”并且有效。
猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 2013-07-23
  • 2015-10-15
  • 2017-07-12
  • 2018-08-07
  • 2014-04-19
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多