Vue使用axios
前言
当然,ajax也可以用于实现数据请求,但是ajax通常适合MVC模型。同时ajax被封装与JQuery,我们总不能为例单次使用ajax而引用整个JQuery.
优点
- 使用简单,体积小
- 支持promise
- 能拦截请求和响应并处理(可用于处理token)
- 可防止CSRF(跨站请求伪造)攻击 -(在请求中附带cookie, 根据浏览器同源策略, 其它网站拿不到cookie,从而避免攻击)
安装与引用
- CDN引入 - 1 - <script src="https://cdn.staticfile.org/axios/0.19.0/axios.min.js"></script> 
- npm安装与引入 - 1 - npm install axios - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85- import axios from 'axios' 
 ```
 # 创建axios对象(vue为例)
 ```js
 import axios from 'axios'
 import { getToken, setToken } from '../utils/token'
 import router from '../router/index'
 const service = axios.create({
 // 设置超时时间 ms
 timeout: 60000,
 // 可设置根路径 带不带斜杠都行
 baseURL: '/api'
 })
 // 请求拦截器
 service.interceptors.request.use(config => {
 const token = getToken()
 if (token) {
 // 为请求头添加token
 config.headers.token = token
 }
 return config
 }, (error) => {
 return Promise.reject(error)
 })
 // 响应拦截器
 service.interceptors.response.use(
 response => {
 // 如果返回未登录错误 返回登录页面
 if (response.data.LoginErr) {
 setToken('')
 router.replace({
 name: 'login'
 })
 return
 }
 return response
 },
 error => {
 if (error && error.response) {
 switch (error.response.status) {
 case 400:
 error.message = '请求错误'
 break
 case 401:
 error.message = '未授权,请登录'
 break
 case 403:
 error.message = '拒绝访问'
 break
 case 404:
 error.message = `请求地址出错: ${error.response.config.url}`
 break
 case 408:
 error.message = '请求超时'
 break
 case 500:
 error.message = '服务器内部错误'
 break
 case 501:
 error.message = '服务未实现'
 break
 case 502:
 error.message = '网关错误'
 break
 case 503:
 error.message = '服务不可用'
 break
 case 504:
 error.message = '网关超时'
 break
 case 505:
 error.message = 'HTTP版本不受支持'
 break
 default:
 break
 }
 }
 return Promise.reject(error)
 }
 )
 export default service
调用
| 1 | // 引用上面创建的axiox对象 | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 个人记录!
 评论



