从文件 express js 提供 json

Posted

技术标签:

【中文标题】从文件 express js 提供 json【英文标题】:Serving json from a file express js 【发布时间】: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 已经使用流传输文件 此设置无效。那么拥有数据库是唯一的选择吗? 【参考方案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”并且有效。

以上是关于从文件 express js 提供 json的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS + Express 提供的 HTML 文件未加载 js 文件?

尝试通过 express node.js 提供 ejs 文件时出错

将 Express.js 与 React.js 一起使用的推荐方式?

使用 Node JS / Express 提供包含图像的静态 HTML 页面

Express (RoutingMiddleware托管静态文件view engine 等等)

使用 express.js 在 node.js 中提供 html 的最佳实践是啥?