node.js - 管道数据块作为对客户端的响应
问题描述
所以我的问题是关于 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
他们终端中的 curl 访问我的路由,我想通过管道将data
其传送到他们的终端。
在阅读时,我知道例如请求模块做了 a request.get(url).pipe(res) /[Express res]
,所以我想知道这是否与我可能需要做的类似。谢谢大家!
解决方案
找到了答案:任何流都可以通过管道传输 - 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);
})
它有效!我希望这对其他人有所帮助-感谢李的帮助!
推荐阅读
- python - seaborn:选择的 KDE 带宽为 0。无法估计密度
- wordpress - 是否可以将 HTTP 站点部署到 API 网关以使其成为 HTTPS?
- sql - 使用条件将一行连接到前一行(Bigquery sql)
- mongodb - 如何使用回调填充?
- c# - 多值 XML 项到 C#
- r - 多个 y 轴使用 plotly 和不同长度的数据
- android - 复合查询未给出正确结果 [Firestore]
- smtp - 如何使用任何 Gmail、outlook、yahoo 帐户的 Javascript 查找 imap 设置
- c# - 如何使用功能应用程序更新共享点在线网站集
- azure - 如何从管道 Azure Devops 访问私有存储库?