MERN应用Express路由访问异常:Cannot GET /posts问题求助
针对你遇到的访问http://localhost:5000/posts返回"Cannot GET /posts"的问题,以下是几个排查和解决方向:
1. 确认文件导入路径正确
检查index.js中导入postRoutes的路径是否与实际文件位置匹配:
import postRoutes from './routes/posts.js';
确保posts.js确实位于项目根目录下的routes文件夹中。如果路径错误(比如写成./posts.js),路由模块不会被正确加载,自然无法响应请求。
2. 配置ES模块支持
由于你的代码使用了import/export语法(ES模块),而Node.js默认采用CommonJS规范,需要在项目的package.json中添加以下配置:
{ "type": "module" }
如果缺少这个配置,Node会无法识别ES模块语法,可能导致路由模块加载失败,服务器虽然启动但未注册目标路由。
3. 重启服务器
修改代码(包括路由、导入路径或package.json)后,必须重启Express服务器才能让更改生效。如果只是保存了文件但没重启,服务器仍在使用旧代码,路由不会生效。
4. 检查控制台错误信息
启动服务器时,查看终端控制台是否有任何报错信息。比如如果路径错误或模块加载失败,控制台会输出对应的错误提示,这能快速定位问题。
5. 验证路由注册顺序
确保app.use('/posts', postRoutes)的位置正确——它应该在bodyParser、cors等通用中间件之后,你的代码顺序是符合要求的:
app.use(bodyParser.json({ limit: '30mb', extended: true })) app.use(bodyParser.urlencoded({ limit: '30mb', extended: true })) app.use(cors()); app.use('/posts', postRoutes); // 顺序正确
如果路由注册在某个会提前返回响应的中间件之后,请求可能无法到达路由处理函数。
按照以上步骤排查后,重新启动服务器,访问http://localhost:5000/posts应该就能看到预期的"THIS WORKS!"了。
内容的提问来源于stack exchange,提问作者Nick singh

