Jupyter AI

18 处理请求和响应之响应JSON数据

📅 发表日期: 2024年8月15日

分类: 🚂Express.js 入门

👁️阅读: --

在前一章中,我们讨论了如何处理 POST 请求,这使我们能够从客户端接收数据并进行处理。在这一章中,我们将深入探讨如何生成 JSON 格式的响应数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

6.3 响应JSON数据

在现代的 Web 应用中,尤其是使用 Ajax 和前端框架时,客户端与服务器之间的数据交换通常采用 JSON 格式。Express.js 提供了很方便的工具来处理这类需求。

6.3.1 使用 res.json() 方法

在 Express.js 中,我们可以使用 res.json() 方法来发送 JSON 响应。这个方法将 JavaScript 对象转换为 JSON 字符串并发送给客户端,默认设置 Content-Typeapplication/json

案例:简单的 JSON 响应

假设我们有一个简单的启动项目,并且我们要创建一个返回用户信息的 API。以下是如何实现这一点:

const express = require('express');
const app = express();
const PORT = 3000;

// 定义一个 GET 路由
app.get('/user', (req, res) => {
    // 模拟用户数据
    const user = {
        id: 1,
        name: '张三',
        age: 25,
        email: 'zhangsan@example.com'
    };

    // 发送 JSON 响应
    res.json(user);
});

// 启动服务器
app.listen(PORT, () => {
    console.log(`服务器正在运行,访问地址: http://localhost:${PORT}`);
});

在这个例子中,当客户端发送 GET 请求到 /user 路由时,服务器将返回一个包含用户信息的 JSON 对象。使用 res.json(user) 方法不仅简单,而且确保将 Content-Type 设置为 application/json

6.3.2 响应数组数据

除了响应对象,我们也可以发送数组形式的 JSON 数据。这在返回多条记录时非常有用。

案例:返回用户列表

假设我们扩展我们的应用,返回多个用户的信息。请看以下代码:

app.get('/users', (req, res) => {
    // 模拟用户列表数据
    const users = [
        { id: 1, name: '张三', age: 25, email: 'zhangsan@example.com' },
        { id: 2, name: '李四', age: 30, email: 'lisi@example.com' },
        { id: 3, name: '王五', age: 22, email: 'wangwu@example.com' }
    ];

    // 发送 JSON 响应
    res.json(users);
});

现在,当我们访问 /users 路由时,返回的数据将会是一个包含多个用户对象的数组。

6.3.3 自定义响应状态码

除了发送 JSON 数据,我们有时还需要根据不同情况返回不同的 HTTP 状态码。我们可以通过以下方式设置状态码:

app.get('/user/:id', (req, res) => {
    const userId = req.params.id;

    // 假设我们没有找到用户
    if (userId > 3) {
        return res.status(404).json({ error: '用户未找到' });
    }

    // 返回找到的用户
    const user = { id: userId, name: '张三' };
    res.json(user);
});

在这个例子中,当请求的用户未找到时,我们使用 res.status(404) 设置状态码为 404 Not Found,并且返回一个包含错误信息的 JSON 对象。

6.3.4 总结

在本节中,我们学习了如何在 Express.js 中使用 res.json() 方法返回 JSON 数据。这对构建现代的 RESTful API 至关重要。通过灵活运用该方法,我们可以轻松返回单个对象、数组,甚至自定义 HTTP 状态码。

作为一个小结,处理请求和响应的能力使我们的应用更加动态和灵活,接下来我们将在下一章中讨论如何处理错误,以确保应用的稳定性和用户体验。

预告

在下一章中,我们将探讨错误处理的基本概念,学习如何更有效地处理应用中的各种错误。这对于创建一个健壮的 Web 应用程序至关重要。