在 Express.js 中,路由是处理客户端请求的核心部分。它允许你定义不同的 HTTP 方法(如 GET、POST 等)对应的端点和处理逻辑。以下是常用的路由方法:
1. app.METHOD(path, handler)
app.METHOD()
是定义路由的基本方式,其中 METHOD
是 HTTP 请求的方法名(小写),比如 get
或 post
;path
是 URL 路径模式;handler
是当匹配到路径时执行的回调函数。
- GET (
app.get()
):用于从服务器获取信息。 - POST (
app.post()
):用于向服务器提交数据,通常用于创建资源。 - PUT (
app.put()
):用于更新服务器上的资源。 - DELETE (
app.delete()
):用于删除服务器上的资源。 - PATCH (
app.patch()
):用于对资源进行部分修改。 - HEAD (
app.head()
):与 GET 类似,但响应体为空,仅返回头信息。 - OPTIONS (
app.options()
):描述目标资源所支持的通信选项。
app.get('/users', (req, res) => {
// 获取用户列表
});
app.post('/users', (req, res) => {
// 创建新用户
});
app.put('/users/:id', (req, res) => {
// 更新指定ID的用户
});
app.delete('/users/:id', (req, res) => {
// 删除指定ID的用户
});
2. app.all()
app.all()
定义一个对所有 HTTP 方法都有效的中间件或路由处理器。它可以用来设置跨域资源共享(CORS)、身份验证等通用逻辑。
app.all('/api/*', function(req, res, next) {
// 对所有以 /api 开头的请求生效
next(); // 必须调用 next() 来传递控制权给下一个中间件/路由
});
3. app.route()
app.route()
提供了一种链式定义多个HTTP方法的能力,这有助于避免重复书写相同的路径。
app.route('/users')
.get((req, res) => {
// 获取用户列表
})
.post((req, res) => {
// 创建新用户
});
4. Router对象
使用 express.Router()
可以创建模块化的、可挂载的路由句柄。这对于构建大型应用或者将路由逻辑分隔开来非常有用。
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
// 主页路由
});
router.get('/about', (req, res) => {
// 关于页面路由
});
module.exports = router;
然后可以在主文件中使用 app.use()
挂载这个路由器:
const express = require('express');
const app = express();
const myRouter = require('./routes/myRouter');
// 挂载 myRouter 到根路径 '/'
app.use('/', myRouter);
app.listen(3000, () => console.log('Server started on port 3000'));
5. 参数化路径
你可以通过在路径中添加冒号(:paramName
)来捕获URL参数,并在路由处理器中访问它们。
app.get('/users/:userId/books/:bookId', (req, res) => {
res.send(`User ID: ${req.params.userId}, Book ID: ${req.params.bookId}`);
});
6. 正则表达式路径
对于更复杂的路由模式匹配,可以使用正则表达式。
app.get(/\/users?\b/, (req, res) => {
// 匹配 "/user" 和 "/users"
});