Nuxt使用axios跨域问题解决方法

在这里插入图片描述

简介
Nuxt 是 Vue 项目服务器端渲染(SSR)解决方案。而在使用时,

就会遇到前后端分离情况下的域名或端口不一致导致的跨域问题

本文将介绍如何通过设置代理解决 Nuxt 与 axios 集成的跨域问题
解决跨域

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

yarn安装

yarn add axios @nuxtjs/axios @nuxtjs/proxy

npm安装 

npm install axios @nuxtjs/axios @nuxtjs/proxy

注意:不需要手动注册 @nuxtjs/proxy 模块,但是必须要确保它在依赖项中。
修改配置文件
//安装完成后在 nuxt.config.js 文件里面添加以下配置:

 modules: ["@nuxtjs/axios"],
  /*
   ** axios proxy
   */
  axios: {
    proxy: true
  },
  /*
   ** proxy
   */
  proxy: {
    "/api": "http://localhost:3000"
  },
  /*
   ** Build configuration
   ** See https://nuxtjs.org/api/configuration-build/
   */
  build: {
    vendor: ["axios"]
  }
// 到此,代理设置完成,可以测试以下跨域问题是否解决。
扩展 axios
//创建 nuxt 插件,更改全局配置全局配置自定义 axios,在 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 中配置 axios.js 插件:

module.exports = {
  /*
   ** Plugins to load before mounting the App
   ** https://nuxtjs.org/guide/plugins
   */
  plugins: ["@/plugins/axios"],
}
使用 axios 插件
//通过上面的设置后,使用 axios 插件需要注意的是在 asyncData 内和在 asyncData 外的使用是所不同的。

//在 asyncData 里使用

async asyncData({ $axios }) {

  const ip = await $axios.get('http://icanhazip.com')
  
  return { ip }
}

在 asyncData 外使用

methods: {

  async fetchSomething() {
  
    const ip = await this.$axios.get('http://icanhazip.com')
    
    this.ip = ip
  }
}

谢谢观看,如有不起,敬请指教,更多关于 Nuxt 与 axios 的集成介绍可以查看官方文档-Axios

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值