路由基础
在构建Web应用时,路由(Routing)是一个核心概念。它决定了当用户访问某个URL时,服务器应该如何响应。Express.js 是一个流行的Node.js框架,它简化了路由的实现。本教程将带你深入了解Express.js中的路由基础。
1. 什么是路由?
路由是指根据HTTP请求的URL和方法(如GET、POST等)来决定服务器应该执行哪些操作。简单来说,路由就是定义URL与处理函数之间的映射关系。
1.1 路由的基本结构
在Express.js中,路由通常由以下几个部分组成:
- HTTP方法:如GET、POST、PUT、DELETE等。
- 路径:URL路径,可以是静态路径或动态路径。
- 处理函数:当请求匹配时,执行的函数。
1.2 示例代码
const express = require('express');
const app = express();
// 定义一个GET请求的路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 定义一个POST请求的路由
app.post('/submit', (req, res) => {
res.send('Data submitted successfully!');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
在这个例子中,我们定义了两个路由:
GET /:当用户访问根路径时,服务器会返回“Hello World!”。POST /submit:当用户提交数据到/submit路径时,服务器会返回“Data submitted successfully!”。
2. 路由路径
路由路径可以是静态的,也可以是动态的。动态路径允许你从URL中提取参数。
2.1 静态路径
静态路径是指路径中没有变量,完全由固定的字符串组成。
app.get('/about', (req, res) => {
res.send('This is the about page.');
});
2.2 动态路径
动态路径允许你在路径中使用变量,这些变量可以从URL中提取出来。
app.get('/user/:id', (req, res) => {
res.send(`User ID: ${req.params.id}`);
});
在这个例子中,:id是一个动态参数,可以通过req.params.id获取。
3. 路由方法
Express.js支持多种HTTP方法,包括GET、POST、PUT、DELETE等。你可以根据需要定义不同的路由方法。
3.1 GET方法
GET方法用于从服务器获取数据。
app.get('/data', (req, res) => {
res.send('Here is your data.');
});
3.2 POST方法
POST方法用于向服务器提交数据。
app.post('/data', (req, res) => {
res.send('Data received.');
});
3.3 PUT方法
PUT方法用于更新服务器上的资源。
app.put('/data/:id', (req, res) => {
res.send(`Data with ID ${req.params.id} updated.`);
});
3.4 DELETE方法
DELETE方法用于删除服务器上的资源。
app.delete('/data/:id', (req, res) => {
res.send(`Data with ID ${req.params.id} deleted.`);
});
4. 路由处理函数
路由处理函数是当请求匹配时执行的函数。它通常接受两个参数:req(请求对象)和res(响应对象)。
4.1 请求对象 (req)
请求对象包含客户端发送的所有信息,如URL、请求头、请求体等。
app.get('/info', (req, res) => {
console.log(req.headers); // 打印请求头
console.log(req.query); // 打印查询字符串
res.send('Info received.');
});
4.2 响应对象 (res)
响应对象用于向客户端发送响应。你可以使用res.send()、res.json()、res.status()等方法来控制响应。
app.get('/status', (req, res) => {
res.status(200).send('OK');
});
5. 实践练习
5.1 创建一个简单的博客应用
在这个练习中,我们将创建一个简单的博客应用,包含以下功能:
- 显示博客列表 (
GET /blogs) - 显示单篇博客 (
GET /blogs/:id) - 创建新博客 (
POST /blogs)
const express = require('express');
const app = express();
let blogs = [
{ id: 1, title: 'First Blog', content: 'This is the first blog.' },
{ id: 2, title: 'Second Blog', content: 'This is the second blog.' }
];
app.use(express.json()); // 解析JSON请求体
// 显示博客列表
app.get('/blogs', (req, res) => {
res.json(blogs);
});
// 显示单篇博客
app.get('/blogs/:id', (req, res) => {
const blog = blogs.find(b => b.id === parseInt(req.params.id));
if (!blog) return res.status(404).send('Blog not found.');
res.json(blog);
});
// 创建新博客
app.post('/blogs', (req, res) => {
const newBlog = {
id: blogs.length + 1,
title: req.body.title,
content: req.body.content
};
blogs.push(newBlog);
res.status(201).json(newBlog);
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
5.2 运行和测试
- 启动服务器:在终端中运行
node app.js。 - 使用Postman或curl测试API:
- 获取博客列表:
GET http://localhost:3000/blogs - 获取单篇博客:
GET http://localhost:3000/blogs/1 - 创建新博客:
POST http://localhost:3000/blogs,请求体为JSON格式,例如:{ "title": "New Blog", "content": "This is a new blog." }
- 获取博客列表:
6. 总结
通过本教程,你已经掌握了Express.js中路由的基础知识。你学会了如何定义静态和动态路由,如何处理不同的HTTP方法,以及如何使用请求和响应对象。接下来,你可以继续学习更高级的路由功能,如路由参数、查询字符串处理等。
在下一节中,我们将深入探讨Express.js中的中间件概念,它将帮助你更好地组织和扩展你的应用。