【问题标题】:How to handle larger node js request?如何处理较大的节点 js 请求?
【发布时间】:2020-06-22 19:23:30
【问题描述】:

如何为大节点js请求发送响应?我有一个 excel 表,其中包含更新价格的 10k 个项目。我正在从 UI 上传 excel 并在 API 中发送所有 JSON 数据以更新数据库中的价格。现在请求由于处理时间而超时。我该如何以适当的方式处理它?处理完所有项目后如何发送响应?

【问题讨论】:

  • 一个有趣的想法是将处理作业移动到队列中并在可能的情况下运行它。同时,您可以从 UI 轮询此队列并检查作业是否完成。这样您就不会遇到任何超时,并且实际工作可能需要尽可能长的时间。

标签: node.js api rest request


【解决方案1】:

使用fs.createReadStream 处理大文件。

即如果您正在处理 csv 文件,您可以像这样处理每一行:

const fs = require("fs")
const csv = require("csv-parser")


function processFile() {

    fs.createReadStream("./my-file.csv")
    .pipe(
        csv()
      )
      .on("data", (data) => {
        const value = data.toString()
        // processing
      })
      .on("end", () => {
          console.log('Completed.')
          // send response 
      })
    }

 // watch for file changes. i.e. new. upload
 fs.watch('somedir', (eventType, filename) => {
    if (filename === 'my-file.csv' && eventType === 'change') {
        processFile();
    }
  });

【讨论】:

  • 其实我的要求是从UI上传excel并在处理完所有项目后发送响应。
  • 我已经修改了代码示例。使用fs.watch 检查目录是否有文件更改,当新文件上传时,然后使用fs.createReadStream() 处理它并在"end" 事件上发回响应。我假设您可以通过 UI 上传文件。它不会超时...
  • 感谢您的建议。您能否建议我将一个文件从 UI 发送到后端进行处理,首先我发送一个文件上传响应(如成功上传文件),然后在处理完所有数据后如何发送状态?
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多