2017-10-08 47 views
0

我有這樣的代碼發送標準輸出/標準錯誤使用節點,並表示

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的唯一文件是沒有其他的文件顯示

+0

刪除'res.send('Hello World!')'並在'else'中放置一個'res.send(...)' 。 – jfriend00

回答

0

好吧,我只需要返回res.send(錯誤);在發送stderr後嘗試發送「hello world」時發生錯誤

相關問題