Express框架app.get('/')未按预期触发 访问根路径无日志输出
Express 根路由不触发问题原因
核心原因
问题出在中间件的注册顺序上,Express 会按照你代码中写的顺序依次执行中间件和路由:
- 你先注册了
express.static静态资源中间件,还配置了extensions: ['html']参数,这个参数会让静态中间件自动匹配对应路径下后缀为html的文件。只要你的public目录下存在index.html文件,当你访问根路径/时,静态中间件会优先匹配到这个文件,直接返回该文件作为响应,请求链路直接终止,不会走到后面你注册的app.get('/', ...)路由逻辑里,自然就没有控制台输出。 - 当你把路由改成
/a之后,静态中间件在public目录下找不到/a对应的资源(比如a.html),就会把请求往后传递,你的自定义路由就能正常匹配执行了。
修复方案
- 方案1:调整中间件注册顺序,把自定义路由放到静态资源中间件之前:
// 先注册自定义路由 app.get('/', async(req, res)=> { console.log('a') res.send('a') }) // 再注册静态资源中间件 app.use(express.static('public', { extensions: ['html'] }));
- 方案2:给静态资源中间件添加访问前缀,避免和业务路由冲突:
// 静态资源访问都需要加/static前缀,比如原来的index.html现在访问路径是/static/ app.use('/static', express.static('public', { extensions: ['html'] })); // 路由注册顺序不用调整,不会和静态路径冲突 app.get('/', async(req, res)=> { console.log('a') res.send('a') })
内容的提问来源于stack exchange,提问作者vol1n
相关产品推荐
相关产品推荐

