您好,登录后才能下订单哦!
小编给大家分享一下Nuxt使用axios如何进行跨域,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
Nuxt 是 Vue 项目服务器端渲染(SSR)解决方案。而在使用时,就会遇到前后端分离情况下的域名或端口不一致导致的跨域问题。本文将介绍如何通过设置代理解决 Nuxt 与 axios 集成的跨域问题。
undefined
解决跨域
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 文件里面添加以下配置:
module.exports = {
 /*
  ** Nuxt.js modules
  */
 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模块。
附录:nuxt使用axios的跨域处理配置
npm i axios qs npm i @nuxtjs/axios @nuxtjs/proxy --save-dev
plugins/axios.js
使用qs将请求从参数转化位字符串
import qs from "qs";
 
export default function({ $axios, redirect }) {
 $axios.onRequest(config => {
  config.data = qs.stringify(config.data, {
   allowDots: true //Option allowDots can be used to enable dot notation
  });
  return config;
 });
 
 $axios.onResponse(response => {
  return Promise.resolve(response.data);
 });
 
 $axios.onError(error => {
  return Promise.reject(error);
 });
}nuxt.config.js
 plugins: [
  { src: "~plugins/axios.js", ssr: true },
 ],
 //处理跨域问题
 modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
 axios: {
  retry: { retries: 3 },
  //开发模式下开启debug
  debug: process.env._ENV == "production" ? false : true,
  //设置不同环境的请求地址
  baseURL:
   process.env._ENV == "production"
    ? "http://localhost:3000/api"
    : "http://localhost:3000/api",
  withCredentials: true,
 },
 proxy: {
  //开启代理
  "/api/": {
   target: "http://192.168.1.2:10086/v1",
   pathRewrite: { "^/api/": "" }
  }
 }在页面使用使用this.$axios做请求
看完了这篇文章,相信你对Nuxt使用axios如何进行跨域有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。