【问题标题】:Pipe data chunks as a Response to a clients terminal管道数据块作为对客户端的响应
【发布时间】:2019-11-12 01:27:04
【问题描述】:

所以我的问题是关于 Node js 管道。所以我的后端看起来像这样——有一个简单的路由,路由调用函数并将可执行类型文件的文件路径传递给它。然后使用childProcess.spawn 运行此文件,并且有一个data 输出,我可以console.log

const express = require("express");
const app = express();
etc...

const runExecutable = (executableFile) => {
   const runFile = childProcess.spawn(executableFile);

   runFile.stdout.on('data', function(data){
       console.log("DATA", data);
   })

   runFile.on('exit', function(code, signal){
       [some code here]
   })
} 

app.get('/example', (req, res) => {
   var file = "./testFile.exe";
   runExecutable(file);
})

我的问题是如何将data/a.k.a 块的输出实时传输到客户端,对他们来说重要的是获取数据,而不是我将其写入文件并将整个事情发送给他们。还有一件事需要注意,客户正在通过他们终端中的 curl curl 123.45.678.901/example 访问我的路由,我想通过管道将 data 传送到他们的终端。

在阅读时,我知道例如请求模块执行request.get(url).pipe(res) /[Express res],所以我想知道这是否与我可能需要做的类似。 谢谢大家!

【问题讨论】:

    标签: node.js express pipe response


    【解决方案1】:

    找到答案:任何流都可以通过管道传输 - readable.pipe(destination[, options]) - childProcess.spawn(executableFile) 不是流,但是一旦文件开始执行,它就会发出 "data" 事件,这是另一种说法有流从文件的运行中发出。因此,如果您正在查看这些 "data" 的出现 - 就像我一样 - 就像这样:

    runFile.stdout.on('data', function(data){
          console.log("DATA", data);
      })
    

    那么这就是您使用的流,这就是您附加pipe的位置

    Node 文档基本上说 - 将.pipe 附加到流,然后将其发送到它的目的地。由于我想将这些数据块发送给我的客户,我还必须传递res,所以我的代码现在看起来像这样:

    const express = require("express");
    const app = express();
    etc...
    
    const runExecutable = (executableFile, res) => {
       const runFile = childProcess.spawn(executableFile);
    
       runFile.stdout.on('data', function(data){
           console.log("DATA", data);
       }).pipe(res)
    
       runFile.on('exit', function(code, signal){
           [some code here]
       })
    } 
    
    app.get('/example', (req, res) => {
       var file = "./testFile.exe";
       runExecutable(file, res);
    })
    

    它有效!我希望这对其他人有所帮助-感谢李的帮助!

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多