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

使用Axios和VueX的Vue应用在localhost:3000出现CORS跨域问题如何解决?

问题根因定位
  • net::ERR_CONNECTION_REFUSED报错的本质是你本地3000端口没有运行对应的后端/静态资源服务:你已经将数据源切换为Vuex关联的本地db.json文件,但Axios配置仍然在请求独立的3000端口服务,该服务未启动自然连接失败,Firefox的CORS报错是连接失败衍生的次级错误,不是核心问题。
  • 你把Access-Control-*系列CORS头配置在了前端Axios的请求头里,这是完全错误的用法:CORS头是服务端返回响应时携带的响应头,前端请求加这些头完全不会生效,甚至可能触发额外的预检请求报错。
修复步骤

步骤1:确认db.json的托管方式

你使用的db.json通常搭配json-server做模拟接口,首先要启动对应服务:
全局安装json-server后直接执行:json-server --watch db.json --port 3000
如果你是把db.json放在Vue项目的public目录下作为静态文件读取,不需要启动json-server,直接修改Axios的baseURL为本地静态文件路径即可。

步骤2:修正Axios的错误配置

删掉EventService.js里所有的Access-Control-*请求头配置,修正后的代码如下:

import axios from 'axios'

const apiClient = axios.create({
  baseURL: 'http://localhost:3000',
  withCredentials: false,
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  }
})

export default {
  getEvents() {
    return apiClient.get('/events')
  },
  getEvent(id) {
    return apiClient.get('/events/' + id)
  },
  postEvent(event) { 
    return apiClient.post('/events', event)
  }
}

步骤3:适配你当前的数据来源逻辑

如果你已经把数据全量存在Vuex中,不需要再调用3000端口的接口,直接把Axios请求替换为Vuex的状态读取逻辑即可:

  • 读取事件列表直接调用对应的Vuex getter或者直接访问this.$store.state.events
  • 新增/修改事件直接调用Vuex的mutation/action操作本地数据,不需要发送HTTP请求

额外可选:开发环境跨域兜底

如果你后续需要调用不同端口的后端接口,直接在Vue项目的vue.config.js里配置代理即可,不需要手动修改CORS头:

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        pathRewrite: { '^/api': '' }
      }
    }
  }
}

配置完成后把Axios的baseURL改为/api,开发环境会自动代理转发请求,不会触发跨域问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:05