vue3.0+axios 跨域+封装
封装:
目录结构:src/utils/request.js, 没有就自己建一个
import axios from 'axios'
import { Message } from 'element-ui' // create an axios instance
const service = axios.create({
baseURL: '/gateway', //添加于请求路径前
timeout: 5000 // request timeout
}) service.interceptors.request.use( //请求拦截
config => {
const token = window.localStorage.getItem('token')
if (token) {
config.headers['autel-token'] = token //在请求之前,像 headers 里面携带token
}
// Do something before request is sent
if (
config.applicationType !== 'JSON' &&
config.url.indexOf('community-attachment') === -1
) { //对 post 请求 或 put 请求的数据做 JSON 转换
if (config.method === 'post' || config.method === 'put') {
let _data = ''
for (const it in config.data) {
const value = config.data[it] === null ? '' : config.data[it]
_data +=
encodeURIComponent(it) + '=' + encodeURIComponent(value) + '&'
}
config.data = _data
}
}
return config
},
error => {
// Do something with request error
return Promise.reject(error)
}
) service.interceptors.response.use( //对请求回来的数据做统一错误处理
response => {
const res = response
if (res.data.code !== 1) {
Message({
message: res.data.message || '不明错误',
type: 'error',
duration: 5 * 1000
})
}
// if the custom code is not 20000, it is judged as an error.
if (res.status !== 200) {
Message({
message: res.message || '不明错误',
type: 'error',
duration: 5 * 1000
})
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
) export default service
跨域, 在 vue.config.js 里配置
module.exports = {
devServer : {
proxy: {
'/gateway': { //由于我们上面在请求头里有添加 gatwat 所以能拦截
target: 'http://autel-cloud-gateway.dev.com', // 接口域名
// secure: false, // 如果是https接口,需要配置这个参数
changeOrigin: true, // 是否跨域
pathRewrite: {
'^/gateway': ''
}
}
},
configureWebpack: {
resolve: {
alias: {
'@': resolve('src') //vue 代码里出现 @ ,表示 src 目录
}
}
}
}
}
使用
src/api/menu.js
import request from '@/utils/request' //添加菜单
export function addOrCompileMenu(data) {
return request({
url: '/api/admin/menu/saveMenu',
method: 'post',
applicationType: 'JSON', //这一段表示,是post 请求,就将 请求参数转换成 JSON 格式
data
})
}
src/views/menu.vue
import { getMenuList } from '@/api/menu'
methods: {
getMenuList({}).then(res => {
if (res.status === 200) {
this.list = res.data.data.menuVoList
}
})
}
vue3.0+axios 跨域+封装的更多相关文章
- vue-cli 3.0 axios 跨域请求代理配置及生产环境 baseUrl 配置
1. 开发环境跨域配置 在 vue.config.js 文件中: module.exports = { runtimeCompiler: true, publicPath: '/', // 设置打包文 ...
- vue-cli 3.0之跨域请求代理配置及axios路径配置
vue-cli 3.0之跨域请求代理配置及axios路径配置 问题:在前后端分离的跨域请求中,报跨域问题 配置: vue.config.js: module.exports = { runtimeCo ...
- vue-cli axios跨域 + 反向代理模拟http请求host+referer
axios跨域 配置config->index.js中的proxyTable,内容如下: proxyTable: { // 跨域请求 '/api': { // 注意此处可设置为 '*' 代表不限 ...
- $Django 前后端之 跨域问题(同源策略) vue项目(axios跨域请求数据)
1 跨域问题(多个域之间的数据访问) #同源策略(ip port 协议全部相同) #本站的只能请求本站域名的数据 #CORS实现(跨域资源共享) #实现CORS通信的关键是服务器.只要服务器实现了CO ...
- 使用ajax请求接口,跨域后cookie无法设置,全局配置ajax;及使用axios跨域后cookie无法设置,全局配置axios
问题一: 使用ajax/axios跨域请求接口,后端放行了,能够正常获取数据,但是cookie设置不进去,后端登录session判断失效 ajax解决办法: //设置ajax属性 crossDomai ...
- JS window.name跨域封装
JS window.name 跨域封装 function CrossDomainName(target, agent, callback, security) { if (typeof target ...
- axios,vue-echarts, async, vue 图表数据处理; axios 跨域代理; 异步同步请求接口;生命周期函数
1.vue-echarts 安装和组件引用 插件官网 https://github.com/ecomfe/vue-echarts 安装 npm install eacharts vue-echarts ...
- asp.net web api2.0 ajax跨域解决方案
asp.net web api2.0 ajax跨域解决方案 Web Api的优缺点就不说了,直接说怎么跨域,我搜了一下,主要是有两种. 一,ASP.NET Web API支持JSONP,分两种 1, ...
- Vue用axios跨域访问数据
Vue用axios跨域访问数据axios是vue-resource的替代品,vue-resource不再维护.安装axios:npm install axios使用vue-cli开发时,由于项目本身启 ...
随机推荐
- Vue进阶课堂之《从HTML到Pug》
是啥 Pug听起来或许比较陌生,但是如果说起她的前生,相信各位多少会有耳闻:Jade.每当你不停的敲打<><><><></></> ...
- html/css系列-图片上下居中
本文详情:http://www.zymseo.com/276.html图片上下居中的问题常用的几种方法:图片已知大小和未知大小,自行理解 .main{ width: 400px;height: 400 ...
- 高性能MySQL之锁详解
一.背景 MySQL里面的锁大致可以分成全局锁.表级锁和行锁三类.数据库锁的设计的初衷是处理并发问题.我们知道多用户共享资源的时候,就有可能会出现并发访问的时候,数据库就需要合理的控制资源的访问规则, ...
- Kubernetes-PersistentVolumeClaim(PVC)介绍
1 PVC介绍 PVC是用户层面,作为对存储资源的需求申请,主要包括了存储空间大小.访问模式.PV的选择条件.存储类别等信息的设置. 2 PVC的参数详解 2.1 PVC的yaml模板 apiVe ...
- 前端开发--nginx篇
安装和启动 Mac上搭建nginx教程 通过Homebrew 安装nginx brew install nginx 配置 添加配置文件在 /usr/local/etc/nginx/servers 目录 ...
- 【WPF学习】第五十七章 使用代码创建故事板
在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...
- 扫码枪读取条形码数据(vue)
扫码枪是模拟键盘输入的,所有事件为document.onkeypress = function(){}. 在vue项目中,是没有window.onload的,所以在created钩子函数中做: var ...
- mysqli_query($conn, "set names utf8"); //**设置字符集*** 不设置插入数据库就是乱码
mysqli_query($conn, "set names utf8"); //**设置字符集*** 不设置插入数据库就是乱码
- [译]ABP框架v2.3.0已经发布!
在新冠病毒的日子里,我们发布了ABP框架v2.3, 这篇文章将说明本次发布新增内容和过去的两周我们做了什么. 关于新冠病毒和我们的团队 关于冠状病毒的状况我们很难过.在Volosoft的团队,我们有不 ...
- 为什么 String 是 immutable 类
二哥,你能给我说说为什么 String 是 immutable 类(不可变对象)吗?我想研究它,想知道为什么它就不可变了,这种强烈的愿望就像想研究浩瀚的星空一样.但无奈自身功力有限,始终觉得雾里看花终 ...