解决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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
AngularJS入门教程(二):AngularJS模板
Dec 06 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
Feb 23 Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
BootStrap注意事项小结(五)表单
Mar 10 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 Javascript
openlayers 3实现车辆轨迹回放
Sep 24 Javascript
vue+Element-ui前端实现分页效果
Nov 15 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
yii框架源码分析之创建controller代码
2011/06/28 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
Python netmiko模块的使用
2020/02/14 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
python 瀑布线指标编写实例
2020/06/03 Python
python 爬虫请求模块requests详解
2020/12/04 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
地质灾害防治方案
2014/05/14 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Java界面编程实现界面跳转
2022/06/16 Java/Android
Python可视化神器pyecharts绘制水球图
2022/07/07 Python