Express 路由是用于定义不同 URL 路径与相应请求处理函数之间关系的重要组成部分。通过路由,您可以将不同的请求映射到不同的处理程序,实现了具体的业务逻辑。下面详细介绍 Express 路由的各个方面,包括路由定义、参数传递、路由保护和一个实际的商业案例。
路由的基本定义
在 Express 中,路由由 app.get()、app.post()、app.put()、app.delete() 等方法来定义。每个方法接受两个参数,第一个参数是路径,第二个参数是请求处理函数。
商业案例:
假设您正在构建一个博客网站,您可以定义一个路由,当用户访问主页时,显示最新的博客文章列表。
app.get('/', (req, res) => {
// 在这里查询数据库获取最新的博客文章列表
// 然后将结果渲染到页面并发送给客户端
res.render('index', { articles: latestArticles });
});
路由参数
路由可以包含参数,参数可以通过 : 表示,并在请求处理函数中使用 req.params 对象访问。
商业案例:
假设您的博客网站允许用户查看特定文章。您可以定义一个带有参数的路由来实现这一功能。
app.get('/articles/:id', (req, res) => {
const articleId = req.params.id;
// 在这里查询数据库获取文章内容
// 然后将结果渲染到页面并发送给客户端
res.render('article', { article: selectedArticle });
});
路由保护
路由可以使用中间件进行保护,以确保只有经过身份验证的用户才能访问。这可以通过在路由定义中添加中间件来实现。
商业案例:
在博客网站中,只有管理员用户才能删除文章。您可以使用身份验证中间件来限制删除路由的访问。
// 身份验证中间件
function authenticate(req, res, next) {
if (req.user && req.user.role === 'admin') {
// 用户是管理员,允许继续执行操作
next();
} else {
// 用户没有权限,返回错误消息
res.status(403).send('Permission denied');
}
}
// 使用身份验证中间件来保护删除路由
app.delete('/articles/:id', authenticate, (req, res) => {
// 删除文章的代码
});
商业案例:实际示例
让我们以一个实际的商业案例来展示 Express 路由的用法。假设您正在构建一个在线书店,需要定义路由来展示书籍信息和处理订单。
const express = require('express');
const app = express();
const port = 3000;
// 路由:显示书籍详情页
app.get('/books/:id', (req, res) => {
const bookId = req.params.id;
// 查询数据库获取书籍信息
const book = database.findBookById(bookId);
if (!book) {
return res.status(404).send('Book not found');
}
// 渲染书籍详情页
res.render('book-detail', { book });
});
// 路由:处理订单
app.post('/order', (req, res) => {
const { bookId, quantity } = req.body;
// 查询数据库获取书籍价格
const book = database.findBookById(bookId);
if (!book) {
return res.status(404).send('Book not found');
}
// 计算订单总额
const totalAmount = book.price * quantity;
// 在这里执行订单处理逻辑,例如生成订单记录等
res.send(`Order placed successfully. Total amount: $${totalAmount}`);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
在这个示例中,我们定义了两个路由:一个用于显示书籍详情页,另一个用于处理订单。通过使用路由,我们将不同的请求映射到不同的处理程序,实现了书籍详情页的显示和订单的处理。
这是 Express 路由的基本使用方法,您可以根据项目需求定义不同的路由来实现不同的功能。路由是 Express 应用程序的核心部分,有助于将代码组织成易于维护和扩展的结构。