管道数据块作为对客户端的响应

所以我的问题是关于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 / aka块的输出实时地通过管道传输到客户端,这对他们来说很重要,因为它们可以获取数据,而不是将其写入一个文件,然后将整个内容发送给他们。需要注意的另一件事是,客户端正在通过终端中的卷曲curl 123.45.678.901/example访问我的路由,而我想将data用管道传输到他们的终端。

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

angelwrq123 回答:管道数据块作为对客户端的响应

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

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

然后就是您使用的流,并且就是附加pipe

的位置

节点文档基本上说-将.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);
})

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

本文链接:https://www.f2er.com/3120471.html

大家都在问