Що фактична різниця між res.send
і і res.json
як здається, виконують ту ж операцію реагування на клієнта.
Що фактична різниця між res.send
і і res.json
як здається, виконують ту ж операцію реагування на клієнта.
Відповіді:
Методи ідентичні при передачі об'єкта або масиву, але res.json()
також перетворять не об’єкти, такі як null
і undefined
, які не є дійсними 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()
методі, який у методі відправлення відсутній:
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);
res.json
врешті-решт дзвінки res.send
, але перед цим:
json spaces
та json replacer
програмиДивлячись у надіслані заголовки ...
res.send використовує тип вмісту: text / html
res.json використовує тип вмісту: application / json
res.json
змушує аргументувати JSON. res.send
візьме не-json об’єкт або масив і надішле інший тип. Наприклад:
Це поверне номер JSON.
res.json(100)
Це поверне код статусу та видасть попередження про використання sendStatus.
res.send(100)
Якщо ваш аргумент не є об'єктом або масивом JSON (нульовим, невизначеним, булевим, рядковим), і ви хочете переконатися, що він надісланий як JSON, використовуйте res.json
.