面试题答案
一键面试Express框架中路由的实现原理
- 匹配请求方法:
- Express使用
app.METHOD(path, [callback...], callback)
这种形式来定义路由,其中METHOD
就是HTTP请求方法,比如get
、post
、put
、delete
等。 - 当一个HTTP请求到达服务器时,Express首先检查请求的方法。例如,如果是一个GET请求,它会查找所有以
app.get
定义的路由。
- Express使用
- 匹配URL路径:
- 路径可以是一个字符串,例如
app.get('/home', function(req, res) { /*... */ });
,这里/home
就是精确匹配的路径。 - 也可以使用路径参数,如
app.get('/user/:id', function(req, res) { /*... */ });
,:id
就是一个参数,这样的路径可以匹配/user/1
、/user/abc
等,Express会将参数值(如1
、abc
)提取到req.params
对象中。 - 还支持正则表达式路径,例如
app.get(/^\/admin\/[a-z]+$/, function(req, res) { /*... */ });
,可以匹配/admin/dashboard
等符合正则规则的路径。
- 路径可以是一个字符串,例如
中间件在路由中的作用
- 预处理:
- 中间件可以在请求到达最终路由处理函数之前对请求进行预处理。比如,可以使用
express.json()
中间件来解析JSON格式的请求体,这样在路由处理函数中就可以直接通过req.body
获取解析后的JSON数据。
- 中间件可以在请求到达最终路由处理函数之前对请求进行预处理。比如,可以使用
- 错误处理:
- 中间件可以用于捕获和处理路由处理过程中抛出的错误。例如,定义一个全局错误处理中间件
app.use(function(err, req, res, next) { /* 处理错误 */ });
,它可以捕获在之前路由处理函数中通过next(err)
传递过来的错误,并进行相应处理,如返回合适的错误响应给客户端。
- 中间件可以用于捕获和处理路由处理过程中抛出的错误。例如,定义一个全局错误处理中间件
- 功能增强:
- 可以在不同路由中复用中间件功能。比如,定义一个日志记录中间件,在多个路由前使用它来记录每个请求的相关信息,如请求方法、URL等,增强应用的可调试性和监控能力。