使用节点和快递发送 stdout/stderr
send stdout/stderr using node and express
我有这个代码
const express = require('express')
const app = express()
app.get('/', function (req, res) {
var process = require('child_process');
process.exec('hadoop fs -ls',function (err,stdout,stderr) {
if (err) {
console.log(typeof(stderr));
console.log("\n"+stderr);
res.send(stderr);
} else {
console.log(stdout);
}
});
res.send('Hello World!')
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
我希望它可以将 cmd 输出发送回客户端,但我收到此错误:
C:\Users\Administrator\Desktop\CSSE 434\project\backend>node index.js
Example app listening on port 3000!
string
'hadoop' is not recognized as an internal or external command,
operable program or batch file.
_http_outgoing.js:371
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.setHeader (_http_outgoing.js:371:11)
at ServerResponse.header (C:\Users\Administrator\Desktop\CSSE434\project\backend\node_modules\express\lib\response.js:767:10)
at ServerResponse.contentType (C:\Users\Administrator\Desktop\CSSE 434\project\backend\node_modules\express\lib\response.js:595:15)
at ServerResponse.send (C:\Users\Administrator\Desktop\CSSE 434\project\backend\node_modules\express\lib\response.js:145:14)
at C:\Users\Administrator\Desktop\CSSE434\project\backend\index.js:10:17
at ChildProcess.exithandler (child_process.js:212:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:194:7)
at maybeClose (internal/child_process.js:899:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
可以看到,输出string
表明stderr是字符串类型
hadoop is not recognized
是正常的,因为我本地没有 hadoop
但我就是不明白为什么它不将结果发送给我的客户。
有人可以帮我解决这个问题吗?
PS:这是我的唯一文件project.There没有其他文件显示
好吧,我只需要 return res.send(stderr);发送 stderr
后尝试发送 "hello world" 时发生错误
我有这个代码
const express = require('express')
const app = express()
app.get('/', function (req, res) {
var process = require('child_process');
process.exec('hadoop fs -ls',function (err,stdout,stderr) {
if (err) {
console.log(typeof(stderr));
console.log("\n"+stderr);
res.send(stderr);
} else {
console.log(stdout);
}
});
res.send('Hello World!')
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
我希望它可以将 cmd 输出发送回客户端,但我收到此错误:
C:\Users\Administrator\Desktop\CSSE 434\project\backend>node index.js
Example app listening on port 3000!
string
'hadoop' is not recognized as an internal or external command,
operable program or batch file.
_http_outgoing.js:371
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.setHeader (_http_outgoing.js:371:11)
at ServerResponse.header (C:\Users\Administrator\Desktop\CSSE434\project\backend\node_modules\express\lib\response.js:767:10)
at ServerResponse.contentType (C:\Users\Administrator\Desktop\CSSE 434\project\backend\node_modules\express\lib\response.js:595:15)
at ServerResponse.send (C:\Users\Administrator\Desktop\CSSE 434\project\backend\node_modules\express\lib\response.js:145:14)
at C:\Users\Administrator\Desktop\CSSE434\project\backend\index.js:10:17
at ChildProcess.exithandler (child_process.js:212:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:194:7)
at maybeClose (internal/child_process.js:899:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
可以看到,输出string
表明stderr是字符串类型
hadoop is not recognized
是正常的,因为我本地没有 hadoop
但我就是不明白为什么它不将结果发送给我的客户。
有人可以帮我解决这个问题吗?
PS:这是我的唯一文件project.There没有其他文件显示
好吧,我只需要 return res.send(stderr);发送 stderr
后尝试发送 "hello world" 时发生错误