You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios GET路径参数未传递至Express路由?Postman与请求差异解析

问题分析:Postman请求正常但Axios请求返回undefined的原因

问题重现

Postman请求场景

发起GET请求:

http://localhost:3000/api/v1/article/659bd71fd17c285560041681

后端控制台输出:

id: 659bd71fd17c285560041681
type: String

Axios请求场景

前端请求代码:

const getArticleByID = async function () {
    const articleId = '659bd71fd17c285560041681'
    const response = await axios.get(`http://localhost:3000/api/v1/article/${articleId}`)
}

后端控制台输出:

undefined
undefined

对应Express控制器代码

exports.getArticleById = async (req, res) => {
  const { id } = req.params;
  try {
    console.log(id);
    console.log(typeof id);
    const article = await Article.findById(id);
    res.status(200).json({
      message: 'got it!',
      article
    });
  } catch (error) {
    console.log(error);
  }
};

问题原因

最可能的几个触发点:

  1. 路由匹配不对应:检查Express路由定义,比如如果路由是/api/v1/articles/:id(复数articles),但Axios请求用的是单数article,就会匹配不到目标控制器,此时req.params.id自然为undefined;而Postman的URL刚好和路由定义一致,所以能正常匹配。
  2. Axios全局配置干扰:如果Axios设置了baseURL(比如axios.defaults.baseURL = 'http://localhost:3000/api'),拼接URL时重复写了前缀,会导致实际请求URL变成http://localhost:3000/api/api/v1/article/xxx,后端无法匹配路由。
  3. 前端请求拦截器修改URL:前端的Axios拦截器可能对请求URL做了额外处理(比如自动添加路径、修改前缀),导致实际请求路径和预期不符;Postman直接发送原始URL,不受拦截器影响。
  4. 路由参数名不匹配:如果后端路由定义的参数名是articleId而非id,控制器里解构const { id } = req.params就会得到undefined。

Postman与Axios请求的核心差异

  • URL预处理逻辑:Axios会受全局配置、拦截器影响自动修改请求URL;Postman直接发送用户输入的原始URL,无额外预处理。
  • 配置独立性:Postman的请求配置是独立的,不会继承全局的路径前缀;Axios如果设置了baseURL,会自动和请求路径拼接,容易出现重复前缀问题。
  • 请求链路透明度:Axios请求的实际路径需要通过浏览器开发者工具(Network面板)查看,而Postman直接显示发送的URL,更容易排查路径问题。

内容的提问来源于stack exchange,提问作者suer231232131133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:23:12