zoukankan      html  css  js  c++  java
  • vue+axios 对restful 请求封装

    礼拜天来公司整理项目,项目是最近开始重构的,里面的各种http请求接口是restful结构的(为了提升项目的比格),整理一下笔记

    
        [restful介绍][1]博主讲的很详细
        技术栈: vue + vuex + element-ui + axios
    
    
        import axios from 'axios'
        
        import store from '../vuex/store'
        import { Message } from 'element-ui'
        
        // axios 配置
        axios.defaults.timeout = 5000
        axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
        
        // POST传参序列化
        axios.interceptors.request.use((config) => {
          // 单个网站的admin用户
          config.headers.common['Gw-Admin-Access-Token'] = store.getters.adminAccessToken
          // 整个网点user
          config.headers.common['Gw-User-Access-Token'] = store.getters.userAccessToken
          return config
        }, (err) => {
          Message.error('参数错误')
          return Promise.reject(err)
        })
        
        // 返回状态判断
        axios.interceptors.response.use((res) => {
          const response = res.data
          if (response.msg) {
            if (response.code === 0) {
              Message.success(response.msg)
            } else {
              Message.error(response.msg)
            }
          }
          return response
        }, (err) => {
          if (err && err.response) {
            switch (err.response.status) {
              case 401:
                Message.error('未授权,请登录')
                window.location.href = '/#/auth/login'
                break
              case 404:
                Message.error('接口请求异常: ' + err.response.config.url + ', 请重试')
                break
              default:
                Message.error('Oops, 出错啦')
            }
          }
          return Promise.reject(err)
        })
        
        export default function request (method, url, data) {
          // 处理请求的url和数据
          data = method === 'get' ? { params: data } : data
          // 发送请求
          return new Promise((resolve, reject) => {
            axios[method](url, data)
              .then(response => {
                resolve(response)
              }, error => {
                reject(error)
              })
              .catch(error => {
                reject(error)
              })
          })
          .catch(error => {
            console.log(error)
          })
        }
    
    

    封装好的axios请求如下:
    1.在相应的api文件中定义方法(如下是goods中的删除商品分类的方法)

    
    
      delCatList (data) {
        return Request('delete', API.GOODS.GOODS_CAT + '/' + data)  //其它的操作将对应的delete换成(put、post、get、delete)即可
      },
    

    2.在需要的vue界面调用

    
    首先:import Goods from '@/fetch/request/goods'
    methods方法: 
    
    
           Goods.addCatList(data).then(res => {
              if (res.code === 0) {
                  console.log(res)
               }
           })
           
           
    

    这里由于封装的时候将axios封装为Promise对象 ,所以可以直接使用.then(),res即为接口返回的结果,代码简介了不少

    
       [Promise对象--阮一峰][2]
    

    总得来说,一次封装,永久收益,哈哈,体验还是不错的,restful的架构风格也是很不错。祝大家周末愉快,杭州下雨:(。。。。

    来源:https://segmentfault.com/a/1190000016146893

  • 相关阅读:
    win7 windows server 2008R2下 https SSL证书安装的搭配(搭配https ssl本地测试环境)
    (转载)数据库表设计-水电费缴费系统(oracle)
    考勤系统——代码分析datagrid
    (转载)模拟银行自助终端系统
    Amazon验证码机器算法识别
    [译] 理解 LSTM 网络
    循环神经网络(RNN, Recurrent Neural Networks)介绍
    机器学习之线性分类器(Linear Classifiers)——肿瘤预测实例
    word2010无法显示endnote x7插件及破解endnote x7
    ubuntu16.04+caffe训练mnist数据集
  • 原文地址:https://www.cnblogs.com/lovellll/p/10145387.html
Copyright © 2011-2022 走看看