Jaka jest rzeczywista różnica między res.send
i res.json
ponieważ oba wydają się wykonywać tę samą operację reagowania na klienta.
Jaka jest rzeczywista różnica między res.send
i res.json
ponieważ oba wydają się wykonywać tę samą operację reagowania na klienta.
Odpowiedzi:
Metody są identyczne, gdy przekazywany jest obiekt lub tablica, ale res.json()
będą także konwertować obiekty niebędące obiektami, takie jak null
i undefined
, które nie są poprawnym JSON.
Metoda korzysta również z ustawień aplikacji json replacer
i json spaces
, dzięki czemu można sformatować JSON z większą liczbą opcji. Te opcje są ustawione tak:
app.set('json spaces', 2);
app.set('json replacer', replacer);
I przeszedł do JSON.stringify()
podobnego:
JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation
To jest kod w res.json()
metodzie, której nie ma metoda send:
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ę 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);
res.json
ostatecznie dzwoni res.send
, ale wcześniej to:
json spaces
i json replacer
aplikacji
Sprawdzanie wysłanych nagłówków ... res.send używa content-type: text / html
res.json używa content-type: application / json
res.json
zmusza argument do JSON. res.send
weźmie obiekt lub tablicę inną niż json i wyśle inny typ. Na przykład:
Zwróci to numer JSON.
res.json(100)
Zwróci kod statusu i wyświetli ostrzeżenie, aby użyć sendStatus.
res.send(100)
Jeśli twój argument nie jest obiektem lub tablicą JSON (null, undefined, boolean, string) i chcesz upewnić się, że jest wysyłany jako JSON, użyj res.json
.