美文网首页JavaScriptVue
封装与后台交互的API(axios)

封装与后台交互的API(axios)

作者: Lia代码猪崽 | 来源:发表于2018-05-31 11:30 被阅读383次

    一、引入使用axios和使用拦截器(配合vuex使用,一般可以用来加token)

    /src/utils/request.js

    import axios from 'axios'
    import store from '@/store'
    
    // create an axios instance
    const service = axios.create({
      // baseURL: 'http://192.168.1.57:8212',
      timeout: 15000
    })
    
    // 添加一个请求拦截器
    axios.interceptors.request.use(function(config){
        config => {
          // 在请求发送之前做一些事
          if (store.getters.token) {
            config.headers.Authorization = 'Bearer ' + store.getters.token// 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
          }
          return config
        },
        error => {
          // Do something with request error
          Promise.reject(error)
        }
    )
    
    // 再添加一个返回拦截器
    axios.interceptors.response.use(function(response){
        response => {
          return response
        },
        error => {
            console.log('err' + error) // for debug
            if (error.response) {
              switch (error.response.status) {
                case 400:
                  Message.error(error.response.data)
                  break
                case 401:
                  Message({
                    message: error.message,
                    type: 'error',
                    duration: 2 * 1000,
                    onClose: () => store.dispatch('Logout')
                  })
                  break
                default:
                  Message({
                    message: error.message || error.response.data,
                    type: 'error',
                    duration: error.response.status === 500 ? 0 : 5 * 1000,
                    showClose: true
                  })
                  break
              }
            }
            return Promise.reject(error)
          }
    )
    

    二、创建某个类使用到的API

    /src/pig.js

    import request from '@/utils/request'
    export default class Pig{
      constructor() {
        this.cfg = {
          Base_url: 'http://test.pig.com/pig'
        }
      }
      // 获取猪列表
      getPigList(params) {
        return request({
          method: 'get',
          url: this.cfg.Base_url,
          params
        })
      }
      // 获取单只猪
      getPig(id) {
        return request.get(`${this.cfg.Base_url}/${id}`)
      }
      // 创建猪
      createPig(data) {
        return request.post(this.cfg.Base_url, data)
      }
      // 更新猪
      updatePig(data) {
        return request.put(this.cfg.Base_url, data)
      }
      // 删除猪
      deletePig(data) {
        return request.delete(this.cfg.Base_url, data)
      }
    }
    

    三、用index来统一引入和导出各种类的接口

    /src/api/index.js

    import Pig from './pig'
    
    export const Pig _api = new Pig ()
    

    四、引入、使用接口

    /src/view/pig/index.vue

    <script>
     // 引入
     import { Pig_api } from '@/api'
    
     export default {
        data() {
          return {
            tableData: [],
            page: 1,
            size: 10,
            totalCount: 0
          }
        },
        created() {
          // 直接调用
          this.init()
        },
        methods: {
          // 定义方法
          async init() {
            const params = {
                page: this.page,
                size: this.size
            }
            const res = await Article_api.getPigList(params)
            this.tableData = res.data.list
          }
        }
      }
    </script>
    

    相关文章

      网友评论

      本文标题:封装与后台交互的API(axios)

      本文链接:https://www.haomeiwen.com/subject/hffqsftx.html