2017-03-02 67 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这样的框架)来决定如何在符合您需求的方式。 –