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

配置axios.defaults.baseURL后向其他服务发起请求报404如何解决

问题根因

你在api/agent.ts中修改了Axios的全局默认配置,只要项目中其他文件导入的是同一个axios包实例,都会默认继承你设置的baseURL: "http://localhost:8800/api",所以请求dummy_data.json时自动拼接了接口前缀,同时你当前写的请求路径/dummy_data.json和实际文件存储路径public/dummyData/dummy_data.json不匹配,两个问题共同导致了404错误。

解决方案

方案1:单次请求覆盖全局baseURL(临时快速解决)

修改fetcher.tsx中的get方法,请求时传入空的baseURL覆盖全局配置即可:

import axios from "axios"

export async function get<T>(path: string): Promise<T> {
    const { data } = await axios.get(path, { baseURL: '' })
    return data
}

同时修改组件中的请求路径为实际存储路径:

const result = await get<Manga[]>("/dummyData/dummy_data.json")

方案2:创建独立Axios实例(推荐,避免配置冲突)

不要直接修改Axios全局配置,不同业务场景用独立的Axios实例隔离配置,从根源避免互相影响:

  1. 先修改api/agent.ts,把业务接口的配置改成独立实例:
import axios, { AxiosResponse } from "axios"

// 自研接口用单独的实例,不污染全局配置
const apiAxios = axios.create({
  baseURL: "http://localhost:8800/api"
})

const responseBody = <T>(response: AxiosResponse<T>) => response.data

const requests = {
    get: <T>(url: string) => apiAxios.get<T>(url).then(responseBody),
    post: <T>(url: string, body: {}) => apiAxios.post<T>(url, body).then(responseBody),
    put: <T>(url: string, body: {}) => apiAxios.put<T>(url, body).then(responseBody),
    del: <T>(url: string) => apiAxios.delete<T>(url).then(responseBody),
}
  1. 修改fetcher.tsx,使用无额外配置的独立Axios实例,或者直接用原生fetch更轻量:
// 选项A:独立Axios实例
import axios from "axios"
const staticAxios = axios.create()

export async function get<T>(path: string): Promise<T> {
    const { data } = await staticAxios.get(path)
    return data
}

// 选项B:原生fetch,不需要依赖Axios
export async function get<T>(path: string): Promise<T> {
  const res = await fetch(path)
  if (!res.ok) throw new Error('静态资源请求失败')
  return res.json() as Promise<T>
}
  1. 同样修改组件中的请求路径为/dummyData/dummy_data.json即可。

方案3:直接传入完整绝对路径

请求时传入带域名的完整路径,Axios检测到路径是完整http/https开头的地址时,会自动跳过全局baseURL拼接:

const result = await get<Manga[]>(`${window.location.origin}/dummyData/dummy_data.json`)
额外注意点

你当前组件中setData(result)之后直接打印data拿到的是旧值,因为React的state更新是异步的,如果你需要查看拿到的结果,直接打印result即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:07