解决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 相关文章推荐
javascript 模式设计之工厂模式详细说明
May 10 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
Jan 06 Javascript
JS实现自动变化的导航菜单效果代码
Sep 09 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
Jan 19 Javascript
Vue-resource实现ajax请求和跨域请求示例
Feb 23 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
jquery 手势密码插件
Mar 17 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
ES6 解构赋值的原理及运用
May 25 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中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
Python字符串替换实例分析
2015/05/11 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python 递归函数详解及实例
2016/12/27 Python
python3.7.0的安装步骤
2018/08/27 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
基于Python中的yield表达式介绍
2019/11/19 Python
详解Python中第三方库Faker
2020/09/25 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
空气环保标语
2014/06/12 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
工作会议简报
2015/07/20 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS