解决Nuxt使用axios跨域问题


Posted in Javascript onJuly 06, 2020

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 文件里面添加以下配置:

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跨域问题的文章就介绍到这了,更多相关Nuxt使用axios跨域内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery用unbind方法去掉hover事件及其他方法介绍
Mar 18 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 Javascript
解决JQuery全选/反选第二次失效的问题
Oct 11 jQuery
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 Javascript
详解vue 组件的实现原理
Nov 12 Javascript
js实现星星打分效果
Jul 05 #Javascript
jQuery实现简单飞机大战
Jul 05 #jQuery
javascript实现贪吃蛇小练习
Jul 05 #Javascript
jQuery实现简单日历效果
Jul 05 #jQuery
jQuery实现飞机大战小游戏
Jul 05 #jQuery
原生js实现随机点名
Jul 05 #Javascript
实例讲解JavaScript 计时事件
Jul 04 #Javascript
You might like
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
浅谈php和.net的区别
2014/09/28 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
php数据序列化测试实例详解
2017/08/12 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
python简单文本处理的方法
2015/07/10 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
python实现同一局域网下传输图片
2020/03/20 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
实现向右循环移位
2014/07/31 面试题
工程管理专业毕业生自荐信
2014/01/24 职场文书
小学毕业演讲稿
2014/04/25 职场文书
特教教师先进事迹
2014/05/21 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书