面试题答案
一键面试路由定义
在Express框架中,路由定义通过app
对象(Express应用实例)的各种方法实现。常用方法有:
app.METHOD(path, callback)
:METHOD
是HTTP方法,如get
、post
等;path
是请求的URL路径;callback
是处理请求的函数。例如:
const express = require('express');
const app = express();
app.get('/home', (req, res) => {
res.send('This is the home page');
});
匹配规则
- 路径匹配:路径可以是字符串形式的具体路径,如
/users
,也可以包含参数,如/users/:id
。参数部分(以:
开头)会被捕获并作为req.params
对象的属性。例如:
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID is ${userId}`);
});
- 按顺序匹配:Express按定义的顺序匹配路由。一旦找到匹配的路由,就会执行相应的处理函数,不再继续匹配后续路由。所以将更具体的路由定义放在前面很重要。
处理不同HTTP方法的请求
- 常用HTTP方法:
- GET:用于获取资源,通过
app.get
定义。例如获取文章列表:
- GET:用于获取资源,通过
app.get('/articles', (req, res) => {
// 从数据库获取文章数据并返回
res.send('Article list');
});
- **POST**:用于提交数据创建新资源,通过`app.post`定义。例如提交用户注册信息:
app.post('/register', (req, res) => {
// 处理用户注册逻辑
res.send('Registration successful');
});
- **PUT**:用于更新资源,通过`app.put`定义。例如更新用户信息:
app.put('/users/:id', (req, res) => {
// 根据req.params.id更新用户信息
res.send('User updated');
});
- **DELETE**:用于删除资源,通过`app.delete`定义。例如删除文章:
app.delete('/articles/:id', (req, res) => {
// 根据req.params.id删除文章
res.send('Article deleted');
});
- 使用
app.all
处理所有HTTP方法:app.all
方法可针对所有HTTP方法定义处理函数。例如:
app.all('/secret', (req, res, next) => {
// 在此处进行通用的请求处理,如身份验证
if (req.user.isAuthenticated) {
next();
} else {
res.send('Access denied');
}
});
这样,无论对/secret
路径发起何种HTTP方法的请求,都会先经过app.all
定义的处理函数。