Express.jsのres.sendとres.jsonの違い


200

間の実際の違いは何であるres.sendres.jsonの両方としては、クライアントへの応答の同じ操作を実行しているようです。


73
回答を投稿している人々がgithubに行ってソースコードを読んだ様子を確認してください。これは、習得して確立するための良い習慣です。真実はソースにあります。
Peter Lyons 2013

31
@PeterLyonsこれは良い習慣だと思いますが、ramが質問する代わりにソースを調べるべきだったということですか?これはこのサイトの目的に反するのではないですか?この質問の存在と、良い情報源(The Source!)に関する回答が役立つ。
LinusR 14

3
はい、男に魚とすべてを教える。
Peter Lyons 14

71
「RTFS」(Read The Source)と言われると、それはドキュメントが彼らが何をすべきかを伝えられないことを実際に意味します。はい、ソースがあると確認できますが、あいまいな場合を除いて、ソースにアクセスする必要はありません。これらのExpress機能はすべて本当に素晴らしいですが、ドキュメントは多くの点で不十分です。SOは、人々がドキュメントから理解できないExpressの事柄についての質問でいっぱいです(私に起こります)。
Juan Lanus

3
場合によっては、ソースを読むだけでは不十分であり、回答から適切な説明が得られる可能性があるため、これにより、関連する概念を最もよく理解できます。単にソースを読んで理解する人もいますが、必ずしもJavaScriptに対応していない初心者はどうでしょうか。それについて考えてください。
cram2208 2015

回答:


210

オブジェクトまたは配列が渡される場合、メソッドは同一ですが、およびres.json()などの非オブジェクトも変換しますnullundefined、有効なJSONではないます。

メソッドはjson replacerおよびのjson spacesアプリケーション設定も使用するため、より多くのオプションでJSONをフォーマットできます。これらのオプションは次のように設定されています。

app.set('json spaces', 2);
app.set('json replacer', replacer);

そしてそのJSON.stringify()ように渡されました:

JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation

これは、res.json()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()は最終的にa になります。

this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');

return this.send(body);


16

送信されたヘッダーを
確認します... res.sendはcontent-type:text / htmlを
使用しますres.jsonはcontent-type:application / jsonを使用します


0

res.json引数をJSONに強制します。 res.sendjson以外のオブジェクトまたは配列を受け取り、別のタイプを送信します。例えば:

これはJSON番号を返します。

res.json(100)

これにより、ステータスコードが返され、sendStatusを使用するように警告が発行されます。

res.send(100)

引数がJSONオブジェクトまたは配列(null、undefined、boolean、string)ではなく、JSONとして送信されるようにしたい場合は、を使用しますres.json

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.