axios中cookie跨域及相关配置示例详解


Posted in Javascript onDecember 20, 2017

前言

最近在跨域、cookie 以及表单上传这几个方面遇到了点小问题,做个简单探究和总结。本文主要介绍了关于axios中cookie跨域及相关配置的相关内容,下面话不多说了,来一起看看详细的介绍吧。

1、 带cookie请求 - 画个重点

axios默认是发送请求的时候不会带上cookie的,需要通过设置withCredentials: true来解决。 这个时候需要注意需要后端配合设置:

  • header信息 Access-Control-Allow-Credentials:true
  • Access-Control-Allow-Origin不可以为 '*',因为 '*' 会和 Access-Control-Allow-Credentials:true 冲突,需配置指定的地址

如果后端设置 Access-Control-Allow-Origin: '*' , 会有如下报错信息

Failed to load http://localhost:8090/category/lists: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:8081' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

后端配置缺一不可,否则会出错,贴上我的后端示例:

const express = require('express')
const app = express()
const cors = require('cors') // 此处我的项目中使用express框架,跨域使用了cors npm插件
app.use(cors{
   credentials: true, 
   origin: 'http://localhost:8081', // web前端服务器地址
   // origin: '*' // 这样会出错
  })

成功之后,可在请求中看到

2、我的前端项目代码的axios配置

axios统一配置,会很好的提升效率,避免bug,以及定位出bug所在(方便捕获到error信息)

建立一个单独的fetch.js封装axios请求并作为方法暴露出来

import axios from 'axios'
// 创建axios实例
const service = axios.create({
 baseURL: process.env.BASE_API, // node环境的不同,对应不同的baseURL
 timeout: 5000, // 请求的超时时间
 //设置默认请求头,使post请求发送的是formdata格式数据// axios的header默认的Content-Type好像是'application/json;charset=UTF-8',我的项目都是用json格式传输,如果需要更改的话,可以用这种方式修改
 // headers: { 
 // "Content-Type": "application/x-www-form-urlencoded"
 // },
 withCredentials: true // 允许携带cookie
})
// 发送请求前处理request的数据
axios.defaults.transformRequest = [function (data) {
 let newData = ''
 for (let k in data) {
 newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&'
 }
 return newData
}]
// request拦截器
service.interceptors.request.use(
 config => {
 // 发送请求之前,要做的业务
 return config
 },
 error => {
 // 错误处理代码
 
 return Promise.reject(error)
 }
)
// response拦截器
service.interceptors.response.use(
 response => {
 // 数据响应之后,要做的业务
 return response
 },
 error => {
 return Promise.reject(error)
 }
)
export default service

如下所示,如果需要调用ajax请求

import fetch from '@/utils/fetch'
fetch({
 method: 'get',
 url: '/users/list'
})
 .then(res => {
 cosole.log(res)
})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
jQuery弹出(alert)select选择的值
Apr 21 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 Javascript
纯javascript实现自动发送邮件
Oct 21 Javascript
基于JavaScript实现仿京东图片轮播效果
Nov 06 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
Dec 07 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 #Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 #Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 #Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 #jQuery
详解Vue 中 extend 、component 、mixins 、extends 的区别
Dec 20 #Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
Dec 20 #Javascript
详解vue mixins和extends的巧妙用法
Dec 20 #Javascript
You might like
jquery插件之easing 动态菜单
2010/08/21 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
js转换对象为xml
2017/02/17 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python实现复制大量文件功能
2019/08/31 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python-openCV开运算实例
2020/07/05 Python
学习Python爬虫的几点建议
2020/08/05 Python
Python 列表反转显示的四种方法
2020/11/16 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
C语言如何决定使用那种整数类型
2016/11/26 面试题
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
三年大学自我鉴定
2014/01/16 职场文书
财务部经理岗位职责
2014/02/03 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书