有什么区别
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.stringify但res.send不会:导致不同的Content-Type标题和内容.
编辑:要回答您对其他答案的评论,发送不同的状态代码仍然会表现相同.
| 归档时间: |
|
| 查看次数: |
7332 次 |
| 最近记录: |