Jaka jest rzeczywista różnica między res.sendi res.jsonponieważ oba wydają się wykonywać tę samą operację reagowania na klienta.
Jaka jest rzeczywista różnica między res.sendi res.jsonponieważ 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 nulli undefined, które nie są poprawnym JSON.
Metoda korzysta również z ustawień aplikacji json replaceri 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.jsonostatecznie dzwoni res.send, ale wcześniej to:
json spacesi json replaceraplikacji
Sprawdzanie wysłanych nagłówków ... res.send używa content-type: text / html
res.json używa content-type: application / json
res.jsonzmusza argument do JSON. res.sendweź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.