2013-09-27 2 views
154

Какова фактическая разница между res.send и res.json, так как оба выполняют такую ​​же работу с ответом на клиента.Разница между res.send и res.json в Express.js

+58

Найдите минутку, чтобы отметить, как люди проводки ответы только пошел в GitHub и читать исходный код. Это хорошая привычка учиться и устанавливать. Истина лежит в Источнике. –

+7

@PeterLyons Используйте источник, Люк! – wprl

+24

@PeterLyons Я согласен, что это хорошая привычка, но вы имели в виду, что баран должен был посмотреть на источник, а не задавать вопрос? Разве это не нарушает цель этого сайта? Присутствие этого вопроса с ответами на хороший источник (The Source!) Полезно. – LinusR

ответ

168

Методы идентичны, когда объект или массив переданы, но 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); 
6

Глядя в заголовки, отправленные ...
res.send использует тип содержимого: текст/html
res.json использует Content-Type: применение/JSon

Смежные вопросы