zoukankan      html  css  js  c++  java
  • Vue使用axios

    前言

    当然,ajax也可以用于实现数据请求,但是ajax通常适合MVC模型。同时ajax被封装与JQuery,我们总不能为例单次使用ajax而引用整个JQuery.

    优点

    1. 使用简单,体积小
    2. 支持promise
    3. 能拦截请求和响应并处理(可用于处理token)
    4. 可防止CSRF(跨站请求伪造)攻击 -(在请求中附带cookie, 根据浏览器同源策略, 其它网站拿不到cookie,从而避免攻击)

    安装与引用

    1. CDN引入
        <script src="https://cdn.staticfile.org/axios/0.19.0/axios.min.js"></script>
    
    1. npm安装与引入
        $ npm install axios
    
        import axios from 'axios'
    

    创建axios对象(vue为例)

    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
    
    

    调用

    // 引用上面创建的axiox对象
    import axios from './index'
    // 也可以不创建直接使用
    // import axios from 'axios'
    const http = {
        request: function (url, data) {
            return new Promise((resolve, reject) => {
                axios({
                    url: url,
                    method: 'post',
                    data: data
                })
                    .then((res) => {
                        resolve(res.data)
                    })
                    .catch(function (error) {
                        reject(error)
                    })
            })
        },
        get: function (url) {
            return new Promise((resolve, reject) => {
                axios.get(url)
                    .then((response) => {
                        resolve(response.data)
                    })
                    .catch((error) => {
                        reject(error)
                    })
            })
        },
        post: function (url, data) {
            return new Promise((resolve, reject) => {
                axios.post(url, data)
                    .then((response) => {
                        resolve(response.data)
                    })
                    .catch((error) => {
                        reject(error)
                    })
            })
        }
    }
    export default http
    
    
    原博客链接:https://www.cnblogs.com/xpengp/
  • 相关阅读:
    Day2----Python常用模块
    Day1--Python基础知识
    AES加密
    MOS管基本MOS管基本认识(快速入门)认识(快速入门)
    printf定义宏方便调试
    ESP8266上电透传与手动透传AT指令设置笔记
    三态门与高阻态
    步进电机原理
    关于stm32 MCU申请动态内存malloc的认识
    高低位数据分离的两种方法
  • 原文地址:https://www.cnblogs.com/xpengp/p/12719432.html
Copyright © 2011-2022 走看看