推荐答案
在 Express 中发送 JSON 响应非常简单,可以使用 res.json()
方法。这个方法会自动将 JavaScript 对象转换为 JSON 格式,并设置适当的 Content-Type
头为 application/json
。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- -------------------- ----- ---- -- - ----- ---- - - -------- ------- -------- ------- --------- -- --------------- --- ---------------- -- -- - ------------------- -- ------- -- ---- ------- ---
在上面的代码中,当客户端访问 /api/data
路由时,服务器会返回一个 JSON 响应,内容为 { "message": "Hello, World!", "status": "success" }
。
本题详细解读
1. res.json()
方法的作用
res.json()
是 Express 提供的一个便捷方法,用于发送 JSON 响应。它会自动将传入的 JavaScript 对象或数组转换为 JSON 字符串,并设置响应头的 Content-Type
为 application/json
。
2. 与 res.send()
的区别
虽然 res.send()
也可以发送 JSON 响应,但它不会自动设置 Content-Type
头。因此,使用 res.json()
是更推荐的方式,因为它确保了响应的内容类型是正确的。
3. 处理复杂数据结构
res.json()
不仅可以处理简单的对象,还可以处理复杂的嵌套对象和数组。Express 会自动将这些数据结构转换为 JSON 格式。
-- -------------------- ---- ------- ---------------------------- ----- ---- -- - ----- ----------- - - ------ - - --- -- ----- ------- -- - --- -- ----- ----- - -- --------- - ----- -- ----------- -- - -- ---------------------- ---
4. 错误处理
如果 res.json()
方法传入的数据无法转换为 JSON 格式(例如,包含循环引用),Express 会抛出一个错误。因此,在处理复杂数据结构时,确保数据是可序列化的。
5. 设置状态码
你还可以在发送 JSON 响应的同时设置 HTTP 状态码:
app.get('/api/not-found', (req, res) => { res.status(404).json({ error: 'Resource not found' }); });
在这个例子中,服务器会返回一个 404 状态码,并附带一个 JSON 响应 { "error": "Resource not found" }
。