Nuxt解决前后端跨域问题

本文详细介绍了如何在Nuxt.js项目中通过设置代理解决与axios集成时遇到的跨域问题。首先,需要安装@nuxtjs/axios和@nuxtjs/proxy模块,然后在plugins目录下创建axios.js文件以自定义axios配置。接着,在nuxt.config.js中配置axios和proxy,指定目标服务器地址和路径重写。最后,通过this.$axios在代码中发起请求,实现跨域数据获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nuxt 是 Vue 项目服务器渲染(SSR)解决方案。而在使用时,就会遇到前后端分离的情况下域名或端口不一致导致的跨域问题。

本篇文章将完整呈现如何通过设置代理解决 Nuxt 与 axios 集成的跨域问题。

扩展 axios

Nuxt 使用 axios 为避免出现前端页面跨域问题,需要安装 @nuxtjs/axios 和 @nuxtjs/proxy 两个模块。

用 yarn 安装

yarn add axios @nuxtjs/axios @nuxtjs/proxy

使用 npm 安装

npm install axios @nuxtjs/axios @nuxtjs/proxy

注意:不需要手动注册 @nuxtjs/axios 模块,但是必须要确保它在依赖项中。

安装完成后,更改全局配置自定义 axios,在 plugins 目录(如果没有 plugins 就新建一下)下新建 axios.js 文件:

// plugins/axios.js
export default function({ $axios, redirect }) {

  $axios.onResponse(res => {
    return res.data
  })

  $axios.onError(error => {
    const code = parseInt(error.response && error.response.status);
    if (code === 400) {
      redirect("/400");
    }
  });
}

跨域配置

在 nuxt.config.js 文件里面添加以下配置:

export default {

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    '@/plugins/axios.js'
  ],

  // Modules: https://go.nuxtjs.dev/config-modules
  modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
  ],

  // Axios module configuration: https://go.nuxtjs.dev/config-axios
  axios: {
    proxy: true,
    prefix: '/api/',
    credential: true
  },

  proxy: {
    '/api/': {
      target: 'http://localhost:8080/', // 目标服务器ip
      pathRewrite: {
        '^/api/': '/',  // 把 /api 替换成 /
        changeOrigin: true // 是否跨域
      }
    }
  },


  // Build Configuration: https://go.nuxtjs.dev/config-build
  build: {
    vendor: ["axios"]
  }
}

执行 axios

在代码中使用 this.$axios 即可,'/person/getByConditions' 是后台控制器中自定义的路径

query() {
  this.$axios.get('/person/getByConditions', { 
    params: {}
  }).then((res) => {
    this.records = res
  })
}
### Ruoyi 前后端分离 CMS 系统实现方案 #### 一、技术栈选择 为了满足门户网站的需求,采用的技术栈如下: - **前端**:基于 Vue.jsNuxt.js 进行服务端渲染 (SSR),以提高页面加载速度和支持 SEO[^1]。 - **后端**:选用 Egg.js 来处理 API 请求和业务逻辑,提供稳定的数据接口给前端调用。 #### 二、项目结构设计 整个项目的架构分为三个主要部分: ##### 1. 若依核心模块 利用 RuoYi 提供的基础功能作为管理平台的核心框架,包括但不限于权限控制、菜单配置等功能。该部分保持原生的 Spring Boot 架构不变,继续沿用 MyBatis 和其他中间件来完成数据库交互操作[^2]。 ##### 2. 自定义 CMS 组件库 创建独立于现有系统的 Vue.js 组件集合,并将其发布到私有的 npm registry 中以便后续维护更新。这些组件可以被用于构建不同的门户站点模板或是特定的应用场景下复用。 ##### 3. 数据交换层 通过 RESTful APIs 或 GraphQL 接口连接前后两端,在此过程中需特别注意安全性措施如身份验证机制的设计实施以及资源共享(CORS)策略设置等问题。 #### 三、具体实施方案 ```javascript // 示例代码展示如何在Nuxt.js中发起API请求并与后端通信 export default { async fetch() { const response = await this.$axios.get('/api/articles'); this.articles = response.data; } } ``` 上述代码片段展示了如何在一个典型的 Nuxt 页面生命周期钩子 `fetch` 方法内向后端发送 HTTP GET 请求获取文章列表数据并赋值给当前实例属性 articles[]。 #### 四、部署与运维建议 考虑到生产环境下的性能优化和服务稳定性,推荐使用 Docker 容器化部署方式;同时借助 CI/CD 工具链自动化测试流程确保每次迭代版本的质量可靠。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值