Node.js-expressでres.json()とres.send()

4849 ワード

1、res.json([body])はjsonの応答を送信する.この方法は,1つのオブジェクトまたは1つの配列をパラメータとしてres.send()メソッドに渡す効果と同じである.ただし、null、undefinedなどの他の値をjsonに変換するには、この方法を使用します.(これらはいずれも技術的に無効なJSONですが).
res.json(null);
res.json({user:'tobi'});
res.status(500).json({error:'message'});

2、res.send([body])はHTTP応答を送信する.bodyパラメータは、Bufferオブジェクト、文字列、オブジェクト、または配列です.例:
res.send(new Buffer('whoop'));
res.send({some:'json'});
res.send('

some html

'
); res.status(404).send('Sorry, we cannot find that!'); res.status(500).send({ error: 'something blew up' });

一般的な非ストリーム要求に対して、この方法は多くの有用なタスクを実行することができる:例えば、以前に定義されていない限り、Content-LengthHTTP応答ヘッダに自動的に値を付与し、自動的なHEADおよびHTTPキャッシュ更新もサポートする.
パラメータがBufferオブジェクトの場合、このメソッドは、次のように事前に指定しない限り、Content-Type応答ヘッダをアプリケーション/octet-streamに設定します.
res.set('Content-Type', 'text/html');
res.send(new Buffer('some html'));

パラメータが文字列の場合、このメソッドはContent-Type応答ヘッダをtext/htmlに設定します.
res.send('some html');

パラメータがオブジェクトまたは配列の場合、ExpressはJSON形式で表されます.
res.send({user:'tobi'});
res.send([1, 2, 3]);

3、res.send()とres.json()の違い
オブジェクトまたは配列を渡す場合、この2つの方法は同じですが、res.json()はnullやundefinedなどの非オブジェクトを変換し、これらの無効なJSONも変換します.
この方法では、json replaceacerとjson spacesの設定も使用するので、より多くのオプションを使用してJSONをフォーマットできます.例:
app.set('json spaces', 2);
app.set('json replacer', replacer);

JSONに渡すstringify()類似:
JSON.stringify(value, replacer, spacing);
// value:         
// replacer: stringify           
// spacing:        

res.jsonメソッドのres.sendセクションにないコード:
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);

最終的にはres.sendを使用してリクエストを送信します
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');

return this.send(body);