记录Vue项目实现axios请求头带上token

在vue项目中首先 npm 命令安装 axios: npm install axios -S

axios 的封装使用请求带上token,token通过登录获取存在vuex,为防止刷新丢失token使用持久化 vuex-persistedstate 插件保存数据

npm i -S vuex-persistedstate

1import persistedState from 'vuex-persistedstate' 2export default new Vuex.Store({ 3 // ... 4 plugins: [persistedState()] 5})

axios 的封装可以全局捕捉接口异常或者是断网的情况的处理,也可以优化接收到的后台数据,处理后返回至前端,首先还是在 src 文件夹下创建 api 文件夹,创建一个封装 axios 的JS文件,命名为:https.js ,然后在 main.js 文件配置全局

https.js 文件

1import axios from 'axios' 2import { Message } from 'view-design'; // 引入iview的消息提示组件,用于提示接口的报错等 3import store from '../store/index'; // 引入vuex-store 4// 创建axios实例 5axios.defaults.withCredentials = true; 6const httpService = axios.create({ 7 baseURL: "", // 需自定义 // url前缀-'http:xxx.xxx' 8 timeout: 900000, // 需自定义 请求超时时间 十五分钟 9 withCredentials: false, // `withCredentials` 表示跨域请求时是否需要使用凭证 10}); 11 12// request拦截器 13httpService.interceptors.request.use( 14 config => { 15 if (store.state.token) { 16 console.log(store.state.token); 17 config.headers['token'] = store.state.token // 让每个请求携带自定义token 请根据实际情况自行修改 18 } 19 return config; 20 }, 21 error => { 22 // 请求错误处理 23 return Promise.reject(error); 24 } 25) 26 27// respone拦截器 28httpService.interceptors.response.use( 29 response => { 30 let msg = "" 31 if (response.status == 200) { 32 switch (response.data.code) { 33 case 1000: 34 msg = response.data.msg 35 // Message['success']({ 36 // background: true, 37 // content: msg, 38 // duration: 3 39 // }) 40 break; 41 default: 42 msg = response.data.msg 43 Message['error']({ 44 background: true, 45 content: msg, 46 duration: 10, 47 closable: true 48 }) 49 50 } 51 // 统一处理状态 52 return Promise.resolve(response.data.data) 53 } else { 54 return Promise.reject(response) 55 } 56 }, 57 // 处理处理 58 error => { 59 if (error && error.response) { 60 switch (error.response.status) { 61 case 400: 62 error.message = '错误请求'; 63 break; 64 case 401: 65 error.message = '未授权,请重新登录'; 66 break; 67 case 403: 68 error.message = '拒绝访问'; 69 break; 70 case 404: 71 error.message = '请求错误,未找到该资源'; 72 break; 73 case 500: 74 error.message = '服务器端出错'; 75 break; 76 default: 77 error.message = `未知错误${error.response.status}`; 78 } 79 Message['error']({ 80 background: true, 81 content: error.message, 82 duration: 10, 83 closable: true 84 }) 85 } else { 86 error.message = "连接到服务器失败"; 87 Message['error']({ 88 background: true, 89 content: error.message, 90 duration: 10, 91 closable: true 92 }) 93 } 94 return Promise.reject(error); 95 } 96) 97 98/*网络请求部分*/ 99 100/* 101 * get请求 102 * url:请求地址 103 * params:参数 104 * */ 105export function get(url, params = {}) { 106 return new Promise((resolve, reject) => { 107 httpService({ 108 url: url, 109 method: 'get', 110 params: params 111 }).then(response => { 112 resolve(response); 113 }).catch(error => { 114 reject(error); 115 }); 116 }); 117} 118 119 120/* 121 * delete请求 122 * url:请求地址 123 * params:参数 124 * */ 125export function del(url, params = {}) { 126 return new Promise((resolve, reject) => { 127 httpService.delete(url, { 128 params: params 129 }).then(response => { 130 resolve(response); 131 }).catch(error => { 132 reject(error); 133 }); 134 }); 135} 136 137/* 138 * delete请求体 139 * url:请求地址 140 * params:参数 141 * */ 142export function delc(url, params = {}) { 143 return new Promise((resolve, reject) => { 144 httpService.delete(url, { 145 data: params 146 }).then(response => { 147 resolve(response); 148 }).catch(error => { 149 reject(error); 150 }); 151 }); 152} 153 154/* 155 * post请求 156 * url:请求地址 157 * params:参数 158 * */ 159export function post(url, params = {}) { 160 return new Promise((resolve, reject) => { 161 httpService.post(url, params) 162 .then(response => { 163 resolve(response); 164 }) 165 .catch(error => { 166 reject(error); 167 }) 168 // httpService({ 169 // url: url, 170 // method: 'post', 171 // data: params 172 // }).then(response => { 173 // resolve(response); 174 // }).catch(error => { 175 // reject(error); 176 // }); 177 }); 178} 179 180/* 181 * put请求 182 * url:请求地址 183 * params:参数 184 * */ 185export function put(url, params = {}) { 186 return new Promise((resolve, reject) => { 187 httpService.put(url, params) 188 .then(response => { 189 resolve(response); 190 }) 191 .catch(error => { 192 reject(error); 193 }) 194 }); 195} 196 197/* 198 * 文件上传 199 * url:请求地址 200 * params:参数 201 * */ 202export function upload(url, params = {}) { 203 return new Promise((resolve, reject) => { 204 httpService({ 205 url: url, 206 method: 'post', 207 data: params, 208 headers: { 'Content-Type': 'multipart/form-data' } 209 }).then(response => { 210 resolve(response); 211 }).catch(error => { 212 reject(error); 213 }); 214 }); 215} 216 217export default { 218 get, 219 del, 220 delc, 221 post, 222 put, 223 upload 224}

在 main.js 文件里引用 https

1import http from '@/api/https.js' 2 3Vue.prototype.$http = http

页面调用

1this.$http.get(url, { custcode: "" }).then(res =>{}) 2this.$http.post(url, { data }).then(res =>{}) 3this.$http.put(url, { data }).then(res =>{}) 4this.$http.del(url, { id: "" }).then(res =>{})

本文转自 https://www.jianshu.com/p/8b44185e2ec4,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

记录Vue项目实现axios请求头带上token - HelloWorld