前端之路--vue学习总结(axios)

关于axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

使用说明:https://www.kancloud.cn/yunye/axios/234845

特点:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

vue项目里使用

$ npm install axios -S

src/utils/auth.js
src/request.js
在这里插入图片描述
在实际项目中,每个请求可能都需要带一个Token(Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮)。

关于Token的文章:Token 认证的来龙去脉

用户登录后,服务端会把Token传给客户端,这个时候就需要保存它。
使用js-cookie

npm install js-cookie -S

auth.js

import Cookies from 'js-cookie'

const TokenKey = 'vue_admin_template_token'

export function getToken() {
  return Cookies.get(TokenKey)
}

export function setToken(token) {
  return Cookies.set(TokenKey, token)
}

export function removeToken() {
  return Cookies.remove(TokenKey)
}

request.js

import axios from 'axios'
//引入mint-ui
import {Indicator,Toast,MessageBox} from 'mint-ui';
import store from '../vuex'
import {getToken} from '@/utils/auth'

// 创建axios实例
const service = axios.create({
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 10000 // 请求超时时间
})

// request拦截器
service.interceptors.request.use(
  config => {
    Indicator.open({
      text: '加载中...',
      spinnerType: 'fading-circle'
    });
    if (store.getters.token) {
      config.headers['session_token'] = getToken() // 让每个请求携带自定义token 根据实际情况修改
    }
    return config
  },
  error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
  }
)
// response 拦截器
service.interceptors.response.use(
  response => {
    /**
     * code为非200是抛错 结合业务进行修改
     */
    Indicator.close();
    const res = response.data
    if (res.code !== "200") {
      Toast({
        message: res.error,
        duration: 1 * 1000,
        position: "bottom"
      })
      // 101:Token 过期了;
      if (res.code === "101") {
        MessageBox.confirm(
          '你已被登出,可以取消继续留在该页面,或者重新登录',
          '确定登出', {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).then(() => {
          store.dispatch('FedLogOut').then(() => {
            location.reload() // 为了重新实例化vue-router对象 避免bug
          })
        })
      }
      return Promise.reject('error')
    } else {
      return response.data
    }
  },
  error => {
    Indicator.close();
    console.log('err' + error) // for debug
    Toast({
      message: error.message,
      type: 'error',
      duration: 1 * 1000,
      position: "bottom"
    })
    return Promise.reject(error)
  }
)

export default service

在请求或响应被 then 或 catch 处理前拦截它们。

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

新建api文件夹,可以将项目中所有请求分模块编写,便于后期维护。
在这里插入图片描述
api封装

import request from '@/utils/request'
//登录
export function login(account, password) {
    return request({
        url: '/login',
        method: 'post',
        data: {
            account,
            password
        }
    })
}

总结

  • Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.
  • 可以使用Axios拦截器在请求或响应被 then 或 catch 处理前拦截它们,做一些必要的处理。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值