2017-03-02 12 views
2

私は学校の割り当てNode.jsに取り組んでおり、出力が正しくなるのに問題があります。 res.endの部分は動作しませんが、res.end(stdout);が動作します。どうして?またはまったく何もない - -JSON構造の出力

Node.js docsで指定されているように
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、sendは非Express.jsの関数ではありません。 –

+0

おっと、私は気づいていないExpressを使うのに慣れています、私の謝罪です!答えはまだ似ているかもしれませんが、私はそれを書いて投稿します。 –

答えて

1

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 * application * APIではなくweb * server * APIであることを覚えておく必要があります。 JSON、認証などのようなより高いレベルの懸念を実装していません.Express、Hapi、Restifyなどのフレームワークをあなたに任せます。あなたのニーズに合った方法。 –