res.send或res.json之间的区别

diE*_*cho 10 node.js express

有什么区别

res.status(STATUS_CODE).send({"message" : "this is the message" });
Run Code Online (Sandbox Code Playgroud)

res.status(STATUS_CODE).json({"message" : "this is the message" });
Run Code Online (Sandbox Code Playgroud)

虽然检查了类似的问题,但这是在快递3的背景下,我正在寻找快递4

MrW*_*hog 14

最终,两者都将实现同样的目标.如果您res.send使用对象调用,它将在res.send以下位置点击此开关:

switch (typeof chunk) {
// string defaulting to html
case 'string':
  if (!this.get('Content-Type')) {
    this.type('html');
  }
  break;
case 'boolean':
case 'number':
case 'object':
  if (chunk === null) {
    chunk = '';
  } else if (Buffer.isBuffer(chunk)) {
    if (!this.get('Content-Type')) {
      this.type('bin');
    }
  } else {
    return this.json(chunk);
  }
  break;
}
Run Code Online (Sandbox Code Playgroud)

如果您发送的对象不是缓冲区 - 它将调用res.json.

res.json只需将Content-Type标题设置为application/json并运行对象JSON.stringify- 使用指定的replacer函数和spacer值.最终它打电话res.send.

这个调用res.send发送一个字符串,case语句将中断,导致正在运行的函数的其余部分.send函数的其余部分设置了诸如etag,内容大小等内容.您可以通过查看快速代码找到更多信息.

当你发送非对象响应时,它们开始有所不同,例如字符串,数字等.在这种情况下res.json,它会运行JSON.stringifyres.send不会:导致不同的Content-Type标题和内容.

编辑:要回答您对其他答案的评论,发送不同的状态代码仍然会表现相同.