Node.js Express服务根路由回调内console.log无输出问题排查
问题原因
Express 中间件和路由的匹配执行严格遵循代码书写顺序从上到下的规则,一旦靠前的处理逻辑返回了响应,后续的匹配链路就会直接终止,不会再执行后面的代码。
你的代码里app.use(express.static('website'))静态资源托管配置写在了根路由app.get('/', ...)之前,且website目录下存在默认首页index.html:express.static默认会自动将托管目录下的index.html作为根路径/的响应返回,当请求访问根路径时,静态资源中间件直接完成响应,后续自定义的根路由回调根本不会被触发,所以回调内的console.log不会有输出。/data路由可以正常执行,是因为website目录下不存在对应路径的静态资源文件,静态中间件找不到匹配资源时会自动放行,请求会流转到后续的路由逻辑完成处理。
解决方案
根据你的业务场景二选一即可:
- 调整代码顺序:将需要优先匹配的自定义根路由,移动到
express.static静态托管配置之前。这样根路径请求会先命中你的自定义逻辑,执行完数据传递、页面渲染操作后返回响应,不会被静态资源中间件拦截。
核心代码顺序参考:// 自定义路由优先书写 app.get('/', function (req, res) { // 此处编写渲染HTML、传递数据的业务逻辑 res.send(projectData); console.log('We are here'); }); app.get("/data", function (req, res) { res.send(projectData); console.log(projectData); }); // 静态资源托管放在自定义路由之后 app.use(express.static('website')); - 修改静态资源配置:如果不想调整现有代码顺序,可以给
express.static传入配置项,关闭默认返回index.html的规则,让根路径请求直接放行到后续路由,其他静态资源(CSS、JS、图片等)的访问不受影响:app.use(express.static('website', { index: false // 禁用静态目录默认首页响应 }));
内容的提问来源于stack exchange,提问作者Ebillson GRAND JEAN
相关产品推荐
相关产品推荐

