Node.js路由问题:GET请求无法访问/speakers页面
看起来你在做Frontend Mentor的Audiophile全栈项目时遇到了路由相关的小麻烦,点击Speakers链接出现Cannot GET /speakers的错误,咱们一步步来排查解决:
1. 先修正App.js里的路由挂载方式
你当前写的app.get("/", viewRouter)是问题的核心之一——app.get()只会匹配根路径(/)的GET请求,并不会把viewRouter里的其他路由(比如/speakers)挂载到整个应用中。
你需要把这行代码改成:
// App.js const viewRouter = require('./path/to/viewRouter'); // 确保这里的文件路径是正确的 // 替换原来的app.get("/", viewRouter) app.use("/", viewRouter);
app.use()会让所有以/开头的请求都经过viewRouter处理,这样viewRouter里的/speakers路由才能被正确识别。
2. 确认viewRouter的导出是否正确
检查你的viewRouter.js文件,确保最后导出了Express的Router实例,不然App.js根本无法拿到这个路由模块:
// viewRouter.js const express = require('express'); const router = express.Router(); const viewsController = require('./path/to/viewsController'); // 路径要对应你的文件位置 router.get("/speakers", viewsController.getSpeakers); module.exports = router; // 这一行一定要有,别漏了!
3. 检查PUG模板的存放位置
你的viewsController.js里用了res.status(200).render("speakers");,Express默认会去项目根目录下的views文件夹找对应的PUG模板。所以要确认speakers.pug确实放在views文件夹里;如果模板在子目录(比如views/pages/speakers.pug),就要改成res.render("pages/speakers");。
4. 别忘了重启服务器
修改完路由配置后,一定要重启你的Express服务器,不然新的配置不会生效。重启后可以直接在浏览器地址栏输入127.0.0.1:3000/speakers测试,如果还是不行,看看控制台有没有报错信息(比如找不到模板、路由未注册之类的提示),能帮你更快定位问题。
另外,你的导航栏里Speakers的链接href="/speakers"是正确的绝对路径,不用改,其他链接用#暂时没问题,后续再替换成对应的路由就行。
备注:内容来源于stack exchange,提问作者Sonoran Studios

