Express后端Axios GET请求访问根路径报404问题排查
问题根因
- 全局作用域下的Axios请求在服务启动阶段就会执行,仅打印结果到终端,和用户访问接口的行为完全无关,请求到达服务端时不会触发这段逻辑
- 你初始化了
Router实例但没有为其注册任何路径匹配的处理方法,直接挂载到根路径后,所有访问http://localhost:3002/的请求找不到对应的处理逻辑,就会返回404错误 - 中间件注册顺序有误,
body-parser的JSON解析中间件需要在路由挂载前注册,否则会出现请求体无法解析的问题
修复后可运行代码
const express = require('express'); const bodyParser = require('body-parser'); const router = require('express').Router(); const cors = require('cors'); const axios = require('axios').default; const app = express(); // 按正确顺序注册公共中间件 app.use(cors()); app.use(bodyParser.json()); // 为根路径注册GET请求处理逻辑 router.get('/', async (req, res) => { try { // 收到前端请求时再发起第三方接口调用 const apiRes = await axios.get('https://rickandmortyapi.com/api/character'); // 将拿到的接口数据返回给请求方 res.json(apiRes.data); } catch (err) { // 捕获异常返回标准化错误信息 res.status(500).json({ code: 500, message: '获取角色数据失败', errMsg: err.message }) } }); app.use('/', router); app.listen(3002, () => { console.log('服务已启动,监听3002端口'); });
验证步骤
- 替换原有代码后重启Node服务
- 直接在浏览器访问
http://localhost:3002/,即可正常获取到Rick and Morty API返回的角色列表数据,不会再出现404报错 - 后续新增接口只需要在
router上按照router.get(路径, 处理函数)、router.post(路径, 处理函数)的格式注册即可,所有和请求相关的业务逻辑都需要写在对应的路由处理函数内部,不要直接写在全局作用域。
内容的提问来源于stack exchange,提问作者svasune
相关产品推荐
相关产品推荐

