推荐答案
在 Express 中发送 JSON 响应非常简单,可以使用 res.json() 方法。这个方法会自动将 JavaScript 对象转换为 JSON 格式,并设置适当的 Content-Type 头为 application/json。
// www.javascriptcn.com code example
const express = require('express');
const app = express();
app.get('/api/data', (req, res) => {
const data = {
message: 'Hello, World!',
status: 'success'
};
res.json(data);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});在上面的代码中,当客户端访问 /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 格式。
// www.javascriptcn.com code example
app.get('/api/complex-data', (req, res) => {
const complexData = {
users: [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
],
metadata: {
page: 1,
totalPages: 10
}
};
res.json(complexData);
});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" }。