在使用 Express 框架开发后端应用时,路由中间件是一个非常重要的组件。它能够帮助我们处理不同的请求,并将其路由到相应的处理程序上。
首先,我们可以创建自定义的路由中间件来处理请求。中间件函数通常具有三个参数:req、res 和 next。req 表示请求对象,res 表示响应对象,next 是一个回调函数,通过调用它来将控制权传递给下一个中间件或路由处理程序。
// 自定义中间件函数
function customMiddleware(req, res, next) {
console.log('这是自定义中间件');
console.log('请求路径:', req.url);
// 执行下一个中间件或路由处理程序
next();
}
module.exports = customMiddleware;
在加载模块时,可以将该自定义中间件导入:
const customMiddleware = require('./customMiddleware');
然后,可以通过以下方式将中间件挂载到 Express 应用上:
app.use(customMiddleware);
app.use("/path", customMiddleware);
路由中间件可以帮助我们将不同类型的请求分发到对应的处理程序上,实现更细粒度的路由功能。
首先,创建一个 routes/users.js 文件来处理用户相关的请求:
// routes/users.js
const express = require('express');
const router = express.Router();
// 处理 GET 请求 /users
router.get('/', function(req, res, next) {
res.send('用户列表');
});
// 处理 GET 请求 /users/login
router.get('/login', function(req, res, next) {
res.send('用户登录');
});
// 处理 POST 请求 /users/register
router.post('/register', function(req, res, next) {
res.send('用户注册');
});
module.exports = router;
然后,在应用中引入该路由文件:
const usersRouter = require('./routes/users');
最后,使用该路由中间件:
app.use('/users', usersRouter);
这样,当应用接收到以 “/users” 开头的请求时,就会将其交由 usersRouter 处理。
路由中间件可以处理不同类型的请求,比如 GET、POST 等。
处理 GET 请求:
router.get(监听请求的路径, 处理回调函数);
处理 POST 请求:
router.post(监听请求的路径, 处理回调函数);
在处理回调函数中,可以编写逻辑来处理请求,并发送相应的响应。
在路由中间件中,可以获取请求参数。Express 提供了多种方式来获取请求参数,包括 query 参数、路由参数和请求体参数。
获取 GET 请求的 query 参数:
// 监听 GET 请求 /users/login
router.get('/login', function(req, res, next) {
console.log(req.query); // 获取 GET 请求的 query 参数
res.json({ code: 1 });
});
获取 GET 请求的路由参数:
// 监听 GET 请求 /users/test/:id
router.get('/test/:id', function(req, res, next) {
console.log(req.params); // 获取 GET 请求的路由参数
res.json({ code: 1 });
});
获取 POST 请求的参数(url-encoded 和 JSON):
首先,在 app.js 中添加解析请求体中间件:
app.use(express.urlencoded()); // 用来解析 x-www-form-urlencoded 类型请求体
app.use(express.json()); // 用来解析 JSON 类型请求体
然后,在路由中间件中获取参数:
// 监听 POST 请求 /users/register
router.post('/register', function(req, res, next) {
console.log(req.body); // 获取 POST 请求的参数
res.json({ code: 1 });
});
通过以上方式,我们可以方便地在 Express 应用中使用路由中间件来处理不同类型的请求,并获取请求参数。这样能够使代码更加模块化和易于维护。