如果我使用 res.send 而不是 res.json 发送 json 文件会怎样?

What would happen if i send a json file using res.send instead of res.json?

我们有一个方法 res.json 在 NodeJs 中发送文件,但是如果我们使用 res.send 发送 json 文件会发生什么。会有什么后果,为什么我们要避免这样做?

我假设你在谈论 ExpressJS:

每当 Express 应用服务器收到 HTTP 请求时,它都会为开发人员提供一个对象,通常称为 res。例如,

例子

app.get('/test', (req, res) => {
   // use req and res here
})

res 对象基本上是指将作为此 API 调用的一部分发出的响应。

res.send:

res.send函数设置内容类型为text/Html 这意味着客户端现在会将其视为文本。然后它 returns 对客户端的响应。

res.json:

其他手机上的res.json函数将content-type header改为application/JSON 以便客户端将响应字符串视为有效的 JSON 对象。它还 returns 对客户端的响应。

结论:

对于 res.send,如果需要,您必须注意将其转换为 JSON 对象,而对于 res.json,这是自动完成的。

来自 express documentation:

res.json([body])

发送 JSON 响应。此方法发送一个响应(带有正确的 content-type),即 使用 JSON.stringify().[=11 将参数转换为 JSON 字符串=]

参数可以是任意JSON类型,包括object、array、string、Boolean、number、null,也可以将其他值转换为JSON.

res.send([body])

发送 HTTP 响应。

body 参数可以是缓冲区 object、字符串、object、布尔值或数组。

此方法为简单的 non-streaming 响应执行许多有用的任务:例如,它自动分配 Content-Length HTTP 响应 header 字段(除非先前已定义)并提供自动 HEAD 和HTTP 缓存新鲜度支持。

当参数是 Buffer object 时,该方法将 Content-Type 响应 header 字段设置为“application/octet-stream”,除非先前已定义。

当参数为字符串时,该方法将Content-Type设置为“text/html”。

当参数为数组或Object时,Express 以JSON 表示响应。