239

res.sendとの実際の違いは何ですかres.json。どちらもクライアントに応答するという同じ操作を実行しているようです。

4

4 に答える 4

247

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

このメソッドは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()は最終的に次のようになります。

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

return this.send(body);
于 2013-09-27T02:39:36.583 に答える
82

https://github.com/visionmedia/express/blob/ee228f7aea6448cf85cc052697f8d831dce785d5/lib/response.js#L174

res.json最終的に を呼び出しますがres.send、その前に:

  • json spacesjson replacerアプリの設定を尊重します
  • 応答に utf8 charset と application/json content-type があることを保証します
于 2013-09-27T02:41:51.617 に答える
21

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

edit: send 実際には、指定された内容に基づいて送信される内容が変更されるため、文字列は text/html として送信されますが、オブジェクトを渡すと application/json を発行します。

于 2016-05-17T12:32:11.050 に答える