解决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 限制输入和粘贴(IE,firefox测试通过)
Nov 14 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
Html5的placeholder属性(IE兼容)实现代码
Aug 30 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
js如何打印object对象
Oct 16 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
JQuery 设置checkbox值二次无效的解决方法
Jul 22 Javascript
Vue表单验证插件Vue Validator使用方法详解
Apr 07 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
Nov 15 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
Dec 06 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
php生成随机颜色的方法
2014/11/13 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
Express.JS使用详解
2014/07/17 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
Python中暂存上传图片的方法
2015/02/18 Python
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Python有参函数使用代码实例
2020/01/06 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Python如何操作docker redis过程解析
2020/08/10 Python
python文件排序的方法总结
2020/09/13 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
linux下进程间通信的方式
2014/12/23 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
小学毕业感言500字
2014/02/28 职场文书
团日活动总结怎么写
2014/06/25 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA