第十章 nodejs 路由

47 阅读3分钟

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 应用程序的核心部分,有助于将代码组织成易于维护和扩展的结构。