【问题标题】:Returning a specific JSON object using Express使用 Express 返回特定的 JSON 对象
【发布时间】:2018-09-17 20:27:28
【问题描述】:

假设我有一个庞大的 JSON 文件,大致结构如下:

{
   "apples": { complex object },
   "oranges": { complex object },
   "grapes": { complex object }
}

在使用 express 时,是否有某种方法可以专门针对要返回的对象?例如,如果有人向我的服务器发出简单的 get 请求,它将专门返回给定的对象。我知道在这种情况下语法和概念是完全错误的,但由于缺乏更好的表达方式,比如......

let testData = 'testdata.json';
app.get('/thing', res => {
   res.json(testData.oranges);
}

我知道您可以返回整个文件,但是在这种情况下会增加大量的加载时间,并且在这种特殊情况下是不切实际的。

或者,或者,让节点解析 JSON 文件并将其拆分为 apples.json、oranges.json 等文件来使用会更好吗?试图理解 A,做这样的事情的最佳实践,以及 B,将其转化为中型项目的实际应用程序的最有效方法。

任何与此相关的想法或建议——即使是图书馆推荐——将不胜感激。

【问题讨论】:

  • 假设节点进程没有为每个请求启动/停止,那么需要一个 JSON 文件 (const testData = require('./testdata.json');) 将在初始进程启动时自动加载和解析它(这会将它保存在内存中进程的生命周期),这意味着您可以按原样使用您的示例来返回部分文件。

标签: json node.js express


【解决方案1】:

如果您发出 POST 请求来处理特定“事物”的负载,然后基于该事物返回一个对象,它应该可以工作。示例:

let testData = {
   "apples": { complex object },
   "oranges": { complex object },
   "grapes": { complex object }
};
app.post('/route', (req, res) => {
   thing = req.body.thing;
   res.json(testData[thing]);
}

【讨论】:

  • 会试一试。感谢您的帮助!
  • 它不需要(技术上也不应该是)POST 请求。这是一个 GET 请求,它应该使用查询参数(例如 /route?part=thing)来指定要返回的对象的所需部分。
【解决方案2】:

这是对某些数据的GET 请求,本质上是因为 JSON 文件可用作键/值存储来查询所需的响应数据。

假设用于指定要返回的对象的所需键的查询参数是part,那么以下示例将起作用:

const testData = require('./testdata.json');

app.get('/thing', (req, res) => res.json(testdata[req.query.part]);

查询/thing?part=apples 将在响应中返回testdata.apples。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2020-11-03
    • 2023-03-15
    • 2020-10-14
    相关资源
    最近更新 更多