web-dev-qa-db-ja.com

nodejs / expressから成功ステータスをブラウザに送信するにはどうすればよいですか?

NodeJS/Expressjsサーバーに次のコードを記述しました。

app.post('/settings', function(req, res){
    var myData = {
        a: req.param('a')
        ,b: req.param('b')
        ,c: req.param('c')
        ,d: req.param('d')
    }

    var outputFilename = 'config.json';

    fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("Config file as been overwriten");
        }
    }); 
});

これにより、送信されたフォームデータを取得し、JSONファイルに書き込むことができます。

これは完全に機能します。しかし、クライアントは何らかの投稿状態のままで、最終的にタイムアウトします。したがって、何らかの成功状態または成功ヘッダーをクライアントに返送する必要があります。

どうすればいいですか?

前もって感謝します!

51
jansmolders86

Express Update 2015:

代わりにこれを使用してください:

res.sendStatus(200)

これは廃止されました:

res.send(200)  
110
ac360

res.json()ヘルパーを介してjsonを送信できることを追加したかっただけです。

_res.json({ok:true}); // status 200 is default
_
_res.json(500, {error:"internal server error"}); // status 500
_

更新2015:

res.json(status, obj)res.status(status).json(obj)を支持して廃止されました

_res.status(500).json({error: "Internal server error"});
_
27
Aron Woost

Express 4では、次のことを行う必要があります。

res.status(200).json({status:"ok"})

非推奨の代わりに:

res.json(200,{status:"ok"})
9
user2468170

Jup、答えを返送する必要があります。最も簡単なのは

res.send(200);

writeFileのコールバックハンドラー内。

200はHTTPステータスコードであるため、障害が発生した場合は変更することもできます。

if (err) {
    res.send(500);
} else {
    res.send(200);
}
8
Samuel