axios 的发送请求时 url 的相对路径是怎么决定的?

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axios 的发送请求时 url 的相对路径是怎么决定的?相关的知识,希望对你有一定的参考价值。

背景

一个基于 React + SpringBoot 实现的前后端分离的项目,联调的时候发现 axios 发送请求时 url 错误。本文分析 axios 在生产环境下发送请求时,url 相对路径是什么的问题。

axios 配置

前后端分离开发时,通常在 axios 配置文件中根据环境变量配置 baseUrl 属性:

const ADDRESS = `$hostname:$port`;
let baseURL = `http://$ADDRESS`;

// 生产环境时,根路径设置为空
if (process.env.NODE_ENV === 'production') 
    baseURL = '';


// 创建axios实例
const service = axios.create(
    baseURL: baseURL, // api的base_url
    timeout: 50000,
    changeOrigin: true, //跨域
    withCredentials: true, // 跨域携带cookie
)

整个应用通过该封装的实例来发送 ajax 请求。

实际请求 url

封装的 API 中调用 service 实例向后台发送请求:

service.get(url, params)

这个 url 的值,有前缀 “/” 和没有时,请求路径是有差距的。

例如:一个删除接口后台路径是 /myapp/delete 下面两种形式请求路径会不同:

  1. 以斜杠开始:service.get("/myapp/delete"),这种请情况下,请求路径是正常的,完整路径为 IP:port/myapp/delete
  2. 非斜杠开始:service.get("myapp/delete"),此时相对路径是当前路由 path ,最终的请求路径是 IP:port/path/myapp/delete ,无疑会导致 404 异常。

启示录

开发过程中我写的 url 都是对应 Controller 层中的接口路径,今天这个路径问题是别的同事拷贝时没注意路径导致的。虽然是他人的错误,但是它引发了我对 axios 请求时相对路径的思考。

其实也比较好理解:没有 / 时,请求发送是相对当前请求路径的;而有前缀时,相对路径就成了应用根路径了。

以上是关于axios 的发送请求时 url 的相对路径是怎么决定的?的主要内容,如果未能解决你的问题,请参考以下文章

axios怎么发送xml数据

axios相关配置属性

axios.get() 在向后端发送请求时正在组合 url。

axios中怎么传数组

axios发送post请求,请求参数会出现在url后面的问题

axios 的get怎么传数组