Node.js Expressjs中数据的异步处理

Node.js Expressjs中数据的异步处理,node.js,express,mongoose,async.js,Node.js,Express,Mongoose,Async.js,我有一个Express route,它接收一些数据并进行处理,然后插入mongo(使用mongoose) 如果我在完成以下步骤后返回响应,则此功能运行良好: 接收请求 处理请求数据 将处理后的数据插入Mongo 返回204响应 但客户端将同时调用此API以获取数百万条记录。因此,要求不是阻止客户端处理数据。因此,我在代码中做了一个小改动: 接收请求 立即用204返回响应 处理请求的数据 将处理后的数据插入Mongo 在客户端收到套接字异常:连接重置对等方错误后,上面的操作对于最初的几个请

我有一个Express route,它接收一些数据并进行处理,然后插入mongo(使用mongoose)

如果我在完成以下步骤后返回响应,则此功能运行良好:

  • 接收请求
  • 处理请求数据
  • 将处理后的数据插入Mongo
  • 返回204响应
但客户端将同时调用此API以获取数百万条记录。因此,要求不是阻止客户端处理数据。因此,我在代码中做了一个小改动:

  • 接收请求
  • 立即用204返回响应
  • 处理请求的数据
  • 将处理后的数据插入Mongo
在客户端收到
套接字异常:连接重置对等方
错误后,上面的操作对于最初的几个请求(比如1000个)都可以正常工作。我猜这是因为服务器阻塞了连接,因为端口不是空闲的,在某个时间点,我注意到我的nodejs进程内存不足

示例代码如下所示:

异步函数排队(数据){ //1.处理数据 //2.在mongo中插入数据 } 异步函数expressController(请求、响应){ logger.info('收到请求') response.status(204.send)() 试一试{ 等待排队(request.body) }捕捉(错误){ 抛出新错误(err) } }
我在这里做错了什么吗?

每个请求向服务器发送多少条记录?向服务器发送请求如何阻止客户端处理数据??在一个请求中可能有500条记录您检查的ID问题?既然您提到数据量巨大,您应该重新考虑您的体系结构。我不确定您使用的架构是什么,但最好的解决方案是使用AWS SQS队列。在队列中添加元素,并创建一个单独的lambda来处理这些元素(将其插入数据库)。当元素添加到队列中时,这个lambda将被触发。通过这种方式,它可以根据您的需要进行扩展,并且没有阻塞或延迟。您的控制器只会将项目添加到队列中。是的,添加队列肯定是我考虑的一种方式(不使用任何云服务)。我等着看有没有人。不涉及队列的其他方法。谢谢@Hassanabbash您每个请求向服务器发送多少条记录?向服务器发送请求如何阻止客户端处理数据??在一个请求中可能有500条记录您检查的ID问题?既然您提到数据量巨大,您应该重新考虑您的体系结构。我不确定您使用的架构是什么,但最好的解决方案是使用AWS SQS队列。在队列中添加元素,并创建一个单独的lambda来处理这些元素(将其插入数据库)。当元素添加到队列中时,这个lambda将被触发。通过这种方式,它可以根据您的需要进行扩展,并且没有阻塞或延迟。您的控制器只会将项目添加到队列中。是的,添加队列肯定是我考虑的一种方式(不使用任何云服务)。我等着看有没有人。不涉及队列的其他方法。谢谢@HassanAbbas