2017-10-08 1 views
0

Ich habe diesen Codesend stdout/stderr Knoten mit und 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!') 
}) 

ich es kann hoffen, die cmd Ausgabe an den Client zurückschicken, aber ich habe diesen Fehler:

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) 

, wie Sie kann sehen, die Ausgabe string zeigt, dass die Stderr ist ein String-Typ der hadoop is not recognized ist normal, weil ich nicht auf meinem lokalen Hadoop haben Aber ich kann einfach nicht herausfinden, warum es das Ergebnis nicht an meinen Kunden sendet. Könnte mir jemand dabei helfen?

PS: Dies ist die einzige Datei in meinem project.There keine anderen Dateien ist

+0

Entfernen Sie 'res.send ('Hallo Welt!')' Und setzen Sie ein 'res.send (...)' in das 'else' . – jfriend00

Antwort

0

Nun zu zeigen, ich muss nur zurückkehren res.send (stderr); Der Fehler tritt auf, wenn versucht wird, "hallo world" nach dem Senden des stderr zu senden