16 处理请求和响应
在上一个章节中,我们学习了如何创建和使用自定义中间件。自定义中间件是 Express.js 中的一个强大特性,它允许我们在请求处理流程中插入自定义逻辑。在本章的开始部分,我们将着重于处理客户端发来的 GET 请求。
6.1 处理GET请求
什么是GET请求?
GET
请求是最常用的 HTTP 方法之一,主要用于从服务器获取数据。当用户在浏览器中输入一个 URL 并访问时,浏览器会发送一个 GET
请求到指定的服务器。我们将在本节中学习如何在 Express.js 中处理这些请求。
设置路由以处理GET请求
在 Express.js 中,我们可以通过 app.get()
方法来定义一个处理 GET 请求的路由。下面是一个基本的示例:
const express = require('express');
const app = express();
const PORT = 3000;
// 处理GET请求
app.get('/hello', (req, res) => {
res.send('Hello, World!');
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
在这个示例中,当用户访问 http://localhost:3000/hello
时,服务器会返回字符串 Hello, World!
。
如何从请求中获取参数
在 GET 请求中,我们常常需要从请求中提取参数。Express.js 提供了 req.query
对象来方便地访问查询参数。查询参数是 URL 中以 ?
开始的部分。例如,在 URL http://localhost:3000/greet?name=John
中,name
是查询参数。
以下是一个处理查询参数的示例:
app.get('/greet', (req, res) => {
const name = req.query.name || 'Guest'; // 获取查询参数 name,若未提供则默认为 'Guest'
res.send(`Hello, ${name}!`);
});
当用户访问 http://localhost:3000/greet?name=John
时,服务器会返回 Hello, John!
。
路由参数
除了查询参数,Express 还支持路由参数,它们在 URL 路径中定义。我们可以在路由中使用冒号(:
)来定义动态参数。以下是一个处理路由参数的示例:
app.get('/users/:id', (req, res) => {
const userId = req.params.id; // 获取路由参数 id
res.send(`User ID is ${userId}`);
});
如果用户访问 http://localhost:3000/users/123
,服务器会返回 User ID is 123
。
处理GET请求的案例
接下来,我们将结合前面的知识,创建一个更复杂的 GET 请求处理示例。我们将构建一个简单的 API,返回用户的信息。
let users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
app.get('/api/users', (req, res) => {
res.json(users); // 返回所有用户
});
app.get('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const user = users.find(u => u.id === userId);
if (user) {
res.json(user); // 返回特定用户信息
} else {
res.status(404).send('User not found'); // 处理未找到的用户
}
});
现在,如果我们访问 http://localhost:3000/api/users
,将返回所有用户的 JSON 数据。如果我们请求 http://localhost:3000/api/users/1
,将获取到 Alice 的信息。如果请求的 ID 不存在,服务器将返回 404 状态和相应信息。
结尾
在本节中,我们了解了如何处理 GET 请求,包括如何使用查询参数和路由参数。掌握这些知识会帮助我们开发出更灵活和功能丰富的 Web 应用程序。
在下一节中,我们将继续研究如何处理 POST 请求,这是与处理数据提交密切相关的内容。