Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 获取、处理和格式化数据以供另一台服务器上的前端应用使用的节点应用程序_Node.js_Amazon Web Services_Express_Amazon S3_Aws Lambda - Fatal编程技术网

Node.js 获取、处理和格式化数据以供另一台服务器上的前端应用使用的节点应用程序

Node.js 获取、处理和格式化数据以供另一台服务器上的前端应用使用的节点应用程序,node.js,amazon-web-services,express,amazon-s3,aws-lambda,Node.js,Amazon Web Services,Express,Amazon S3,Aws Lambda,我目前有一个只支持前端的应用程序,它可以获取5-6个不同的JSON提要,从每个提要中获取一些必要的数据,然后根据这些数据呈现页面。我想将应用程序的数据获取/处理部分移动到服务器端节点应用程序,该应用程序输出一个简单的JSON文件,前端应用程序可以获取并轻松呈现该文件 本项目有两个值得注意的复杂因素: 1) 新的后端应用程序必须位于与前端应用程序不同的服务器上 2) 一些提要经常更改,因此我需要后端处理不断检查更改(每5-10秒一次)。目前只有前端应用程序,浏览器会在加载时获取提要的最新版本。我希

我目前有一个只支持前端的应用程序,它可以获取5-6个不同的JSON提要,从每个提要中获取一些必要的数据,然后根据这些数据呈现页面。我想将应用程序的数据获取/处理部分移动到服务器端节点应用程序,该应用程序输出一个简单的JSON文件,前端应用程序可以获取并轻松呈现该文件

本项目有两个值得注意的复杂因素:

1) 新的后端应用程序必须位于与前端应用程序不同的服务器上

2) 一些提要经常更改,因此我需要后端处理不断检查更改(每5-10秒一次)。目前只有前端应用程序,浏览器会在加载时获取提要的最新版本。我希望尽可能地复制这种行为

我解决这个问题的思考过程将我带向两个方向:

第一个是设置一个express应用程序,它使用setTimeout不断检查要处理的新数据。然后将此数据作为对简单GET请求的响应发送:

const express = require('express');
let app = express();
let processedData = {};
const getData = () => {...} // returns a promise that fetches and processes data


/* use an immediately invoked function with setTimeout to fetch the data 
 * when the program starts and then once every 5 seconds after that */
(function refreshData() {
  getData.then((data) => {
    processedData = data;
  });

  setTimeout(refreshData, 5000);
})();

app.get('/', (req, res) => {
  res.send(processedData);
});

app.listen(port, () => {
  console.log(`Started on port ${port}`);
});
然后,我将从客户端运行一个简单的get请求(在正确调整CORS头之后)来获取JSON对象

关于这种方法,我的问题非常笼统:这是解决这个问题的好办法吗?基于处理/客户端获取请求,这会增加托管成本吗?setTimeout是让任务在服务器上重复运行的好方法吗

我正在考虑的另一个解决方案是设置一个AWS Lambda,将生成的JSON写入s3存储桶。然而,安排AWS Lambda函数的最小间隔似乎是1分钟。我想我可以设置3或4个相同的Lambda函数,并将它们偏移10-15秒,但是这看起来太粗糙了,让我身体不舒服

如有任何建议/建议/解决方案,将不胜感激。我还不是一名经验丰富的后端开发人员,所以请在您认为合适的任何地方加入ELI5。

几点建议

用于定期处理数据。这是非常可取的,尤其是在格式化大量数据时

不要为同一任务设置多个Lambda函数。维护所有这些功能会很麻烦

处理/获取提要后,您可以将JSON文件存储在自己的服务器或S3中。请注意,如果是S3,那么您正在付费并等待网络操作。您可以从express应用程序读取文件,然后将响应发送回您的客户


根据文件大小和服务器中的负载,您可能需要添加一个缓存服务器,以便可以缓存响应,直到有新的JSON数据可用。

谢谢您的建议,我正在研究crontasks