推荐答案
Express 的路由(Routing)是指根据客户端请求的 HTTP 方法和 URL 路径,将请求映射到相应的处理函数的过程。通过路由,开发者可以定义应用程序的端点(URI)以及对这些端点的响应方式。
在 Express 中,路由通常通过 app.METHOD(PATH, HANDLER) 的形式定义,其中:
METHOD是 HTTP 请求方法(如GET、POST、PUT、DELETE等)。PATH是服务器上的路径(如/users、/products等)。HANDLER是当路由匹配时执行的函数,通常用于处理请求并发送响应。
例如:
app.get('/users', (req, res) => {
res.send('Get all users');
});本题详细解读
1. 路由的基本概念
路由是 Express 框架的核心功能之一,它允许开发者根据请求的 URL 和方法来定义不同的处理逻辑。每个路由可以包含一个或多个处理函数,这些函数会按照顺序执行,直到其中一个函数发送响应或终止请求-响应循环。
2. 路由的组成
- HTTP 方法:Express 支持所有标准的 HTTP 方法,如
GET、POST、PUT、DELETE等。此外,Express 还提供了app.all()方法,用于匹配所有 HTTP 方法。 - 路径(PATH):路径可以是字符串、字符串模式或正则表达式。例如:
/users:匹配/users路径。/users/:id:匹配/users/123等路径,并将123作为参数传递给处理函数。/users/*:匹配/users/开头的所有路径。
- 处理函数(HANDLER):处理函数接收请求对象(
req)和响应对象(res),并可以执行任意逻辑。处理函数可以是一个或多个,多个处理函数会按顺序执行。
3. 路由的示例
以下是一些常见的路由示例:
// www.javascriptcn.com code example
// 处理 GET 请求
app.get('/users', (req, res) => {
res.send('Get all users');
});
// 处理 POST 请求
app.post('/users', (req, res) => {
res.send('Create a new user');
});
// 处理带参数的路由
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.send(`Get user with ID ${userId}`);
});
// 使用多个处理函数
app.get('/products', (req, res, next) => {
console.log('Logging request...');
next();
}, (req, res) => {
res.send('Get all products');
});4. 路由的模块化
为了保持代码的可维护性,Express 支持将路由模块化。可以使用 express.Router() 创建模块化的路由处理程序,然后在主应用中挂载这些路由。例如:
// www.javascriptcn.com code example
// users.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('Get all users');
});
router.get('/:id', (req, res) => {
res.send(`Get user with ID ${req.params.id}`);
});
module.exports = router;
// app.js
const express = require('express');
const usersRouter = require('./users');
const app = express();
app.use('/users', usersRouter);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});5. 路由的优先级
Express 会按照路由定义的顺序进行匹配,因此路由的优先级取决于它们在代码中的顺序。如果多个路由可能匹配同一个请求,Express 会执行第一个匹配的路由。
6. 路由的中间件
路由处理函数本质上也是中间件,因此可以在路由中使用中间件来处理请求。例如:
app.use('/users', (req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
});
app.get('/users', (req, res) => {
res.send('Get all users');
});通过以上内容,可以全面理解 Express 路由的概念、用法和最佳实践。