Qual é a diferença real entre res.send
e res.json
como ambos parecem executar a mesma operação de resposta ao cliente.
Qual é a diferença real entre res.send
e res.json
como ambos parecem executar a mesma operação de resposta ao cliente.
Respostas:
Os métodos são idênticos quando um objeto ou matriz é passado, mas res.json()
também convertem não-objetos, como null
e undefined
, que não são JSON válidos.
O método também usa as configurações de aplicativo json replacer
e json spaces
, para que você possa formatar o JSON com mais opções. Essas opções são definidas assim:
app.set('json spaces', 2);
app.set('json replacer', replacer);
E passou para um JSON.stringify()
assim:
JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation
Este é o código no res.json()
método que o método send não possui:
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);
O método acaba como um res.send()
no final:
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');
return this.send(body);
res.json
eventualmente chama res.send
, mas antes disso:
json spaces
e json replacer
aplicativosProcurando nos cabeçalhos enviados ...
res.send usa o tipo de conteúdo: text / html
res.json usa o tipo de conteúdo: application / json
res.json
força o argumento para JSON. res.send
pegará um objeto ou matriz não json e enviará outro tipo. Por exemplo:
Isso retornará um número JSON.
res.json(100)
Isso retornará um código de status e emitirá um aviso para usar o sendStatus.
res.send(100)
Se o seu argumento não for um objeto ou matriz JSON (nulo, indefinido, booleano, sequência de caracteres) e você deseja garantir que ele seja enviado como JSON, use res.json
.