ExpressJS中GET/POST与USE的URL过滤机制差异咨询
Express 中
router.use() 与 GET/POST 路由的 URL 过滤机制 代码对比
GET 路由写法
router.get('/',(req,res,next)=>{ console.log('first middleware function'+req.originalUrl) })
VS
use 中间件写法
router.use('/',(req,res,next)=>{ console.log('first middleware function'+req.originalUrl) })
核心差异解析
1. router.get()/router.post():精确匹配 + 方法限制
这类方法是指定 HTTP 方法 + 严格路由匹配的组合:
- 只有当请求的HTTP 方法完全匹配(比如 GET 对应 GET 请求),且请求路径与指定路径完全一致时,才会触发对应的处理函数。
- 就像你遇到的情况,
router.get('/')只会响应GET /请求,访问/jhds这类路径时,因为路径和/不完全相等,所以不会执行这个函数。
2. router.use():前缀匹配 + 无方法限制
router.use() 的匹配逻辑是前缀匹配,且不限制 HTTP 请求方法:
- 只要请求路径以指定的路径作为前缀,不管后面跟着什么内容,也不管是 GET/POST/PUT 哪种请求方法,都会触发这个中间件。
- 因为所有 HTTP 请求的路径都是以
/开头的,所以router.use('/')会匹配所有请求,这就是为什么你访问/jhds时它也会执行。如果换成router.use('/api'),那么/api/user、/api/post/123这类以/api开头的请求都会触发它。
额外说明
- 如果
router.use()不写路径(直接传中间件函数),会匹配所有请求,相当于全局生效的中间件。 router.get()也支持路由参数(比如/user/:id)或通配符,但本质还是基于请求方法的精确路由规则,和use的前缀匹配逻辑完全不同。
内容的提问来源于stack exchange,提问作者sean
相关产品推荐
相关产品推荐

