Какова реальная разница между ними 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()
методе, которого метод send не имеет:
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);
Метод заканчивается как a 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 использует тип контента: приложение / json
res.json
заставляет аргумент JSON. res.send
возьмет не-JSON объект или массив и отправит другой тип. Например:
Это вернет номер JSON.
res.json(100)
Это вернет код состояния и выдаст предупреждение для использования sendStatus.
res.send(100)
Если ваш аргумент не является объектом или массивом JSON (null, undefined, boolean, string), и вы хотите, чтобы он был отправлен как JSON, используйте res.json
.