如何使用node.js从stdin逐行传输数据并发送到客户端?
我试图做的是从一个scala文件中设置一个流,该文件正在写入标准输出,并通过管道输出到node.js。e、 g.writing.scala | node index.js然后,在node.js中,我想读取每一行输入的内容并将其发送给客户端。有人知道我该怎么做吗?有没有更好的方法来完成同样的事情?最简单的方法是使用以下函数从节点应用程序中调用您的如何使用node.js从stdin逐行传输数据并发送到客户端?,node.js,streaming,pipe,stdin,Node.js,Streaming,Pipe,Stdin,我试图做的是从一个scala文件中设置一个流,该文件正在写入标准输出,并通过管道输出到node.js。e、 g.writing.scala | node index.js然后,在node.js中,我想读取每一行输入的内容并将其发送给客户端。有人知道我该怎么做吗?有没有更好的方法来完成同样的事情?最简单的方法是使用以下函数从节点应用程序中调用您的scala程序: var express = require('express'); var exec = require('child_process'
scala
程序:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
exec('your scala program',
function (error, stdout, stderr) {
res.send(stdout);
});
});
app.listen(3000);
如果你不在乎错误,你可以使用管道
来加速你的应用程序。在这种情况下,节点
将在调用scala程序后立即开始向客户端发送数据。我不能完全确定语法,但应该是这样的:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
var child = exec('your scala program');
child.stdout.pipe(res);
});
app.listen(3000);
...
exec('your scala program',
function (error, stdout, stderr) {
stdout.pipe(res);
});
...
最简单的方法是使用以下函数从节点应用程序中调用您的
scala
程序:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
exec('your scala program',
function (error, stdout, stderr) {
res.send(stdout);
});
});
app.listen(3000);
如果你不在乎错误,你可以使用管道
来加速你的应用程序。在这种情况下,节点
将在调用scala程序后立即开始向客户端发送数据。我不能完全确定语法,但应该是这样的:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
var child = exec('your scala program');
child.stdout.pipe(res);
});
app.listen(3000);
...
exec('your scala program',
function (error, stdout, stderr) {
stdout.pipe(res);
});
...
Leonids的回答是98%正确的,因为
res
是一个可写流,stdout
是一个可读流,所以代码应该这样写:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
var child = exec('your scala program');
child.stdout.pipe(res);
});
app.listen(3000);
...
exec('your scala program',
function (error, stdout, stderr) {
stdout.pipe(res);
});
...
Leonids的回答是98%正确的,因为
res
是一个可写流,stdout
是一个可读流,所以代码应该这样写:
var express = require('express');
var exec = require('child_process').exec;
var app = express();
app.get('/', function(req, res){
var child = exec('your scala program');
child.stdout.pipe(res);
});
app.listen(3000);
...
exec('your scala program',
function (error, stdout, stderr) {
stdout.pipe(res);
});
...
谢谢您的更正,但根据
child\u process.exec
文档,回调中的stdout
是缓冲区,而不是可读流
。这是因为当子进程终止时,exec
调用它的回调。但是excec
函数返回带有stdout
属性的ChildProcess
对象,该属性是可读流
。我用正确的piping.Thanx语法更新了我的答案供您更正,但根据child\u process.exec
文档,回调中的stdout
是缓冲区
而不是可读流
。这是因为当子进程终止时,exec
调用它的回调。但是excec
函数返回带有stdout
属性的ChildProcess
对象,该属性是可读流
。我用正确的管道语法更新了我的答案。