2013-09-27 8 views
154

Jaka jest rzeczywista różnica między res.send i res.json, ponieważ wydaje się, że oba te same operacje odpowiadają na klienta.Różnica między res.send i res.json w Express.js

+58

Poświęć chwilę, aby zauważyć, jak ludzie zamieszczanie odpowiedzi po prostu poszedł do GitHub i odczytać kodu źródłowego. Jest to dobry nawyk do nauki i ustalenia. Prawda leży w Źródle. –

+7

@PeterLyons Użyj źródła, Luke! – wprl

+24

@PeterLyons Zgadzam się, że to dobry nawyk, ale czy miałeś na myśli, że baran powinien spojrzeć na źródło zamiast zadawać pytanie? Czy nie jest to sprzeczne z celem tej witryny? Obecność tego pytania, z odpowiedziami odnoszącymi się do dobrego źródła (Źródło!) Jest przydatna. – LinusR

Odpowiedz

168

Metody są identyczne, gdy obiekt lub tablica jest przekazywana, ale res.json() przekształci także obiekty nie będące obiektami, takie jak null i undefined, które nie są poprawnymi JSON.

Metoda wykorzystuje również ustawienia aplikacji json replacer i json spaces, dzięki czemu można sformatować JSON z większą liczbą opcji. Opcje te są ustawione tak:

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

i przeszedł do JSON.stringify() tak:

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

Jest to kod w metodzie res.json() że metoda send nie ma:

var app = this.app; 
var replacer = app.get('json replacer'); 
var spaces = app.get('json spaces'); 
var body = JSON.stringify(obj, replacer, spaces); 

Metoda kończy się jako res.send() na końcu:

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

return this.send(body); 
6

Poszukuję w nagłówkach wysłanych ...
res.send wykorzystuje Content-Type: text/html
res.json wykorzystuje Content-Type: application/json

Powiązane problemy