2017-03-02 107 views
2

我正在做一個學校作業Node.js,並且無法正確輸出我的輸出。這是res.end部分不起作用,但res.end(stdout);的作品。爲什麼?JSON結構輸出

case "/status": 
    /** 
    * Run child process "uname -a". 
    */ 
    cp.exec("uname -a", (error, stdout, stderr) => { 
     if (error || stderr) { 
      // Do something with the error(s) 
      console.log("Something went wrong...", error, stderr); 
     } 

     // status route 
     res.writeHead(200, { "Content-Type": "application/json" }); 
     res.end({ 
      "uname": stdout 
     }); 
    }); 
break; 
+0

@JoeClay,發送不是非Express.js中的函數。 –

+0

哎呀,我很習慣使用Express,我沒有意識到,我的道歉!答案可能仍然相似,但是 - 我會寫一個併發布它。 –

回答

1

正如Node.js docs規定,res.end只能取一個字符串或緩衝區 - 或者什麼都沒有 - 作爲第一個參數。如果你想用它來發送JSON,你必須設置內容類型(你所做的)和字符串化對象:

res.writeHead(200, { "Content-Type": "application/json" }); 
res.end(JSON.stringify({ 
    "uname": stdout 
})); 

這實際上是what Express.js does when you call res.send/res.json on an object

+0

感謝您的幫助!我從來沒有嘗試過把JSON.stringify放在那裏。 –

+0

@AnttiKeränen:沒問題!我認爲在使用Node的HTTP模塊時需要注意的一點是它是一個web * server * API,而不是一個web * application * API。他們沒有實現像JSON或認證等更高層次的問題等等 - 他們將它留給您(或更可能的是,像Express,Hapi或Restify這樣的框架)來決定如何在符合您需求的方式。 –