当前位置: 首页 > news >正文

vue项目-axios封装、easy-mock使用

 vue全家桶概括下来就是

  • 项目构建工具(vue-cli)
  • 路由(vue-router)
  • 状态管理(vuex)
  • http请求工具

 vue有自己的http请求工具插件vue-resource,但是vue2.0后作者就不在更新了,后更推荐axios。

 下面是vue项目中axios常用的方法,以及生成虚拟数据的easy-mock的使用方法。

一、axios安装和easy-mock的使用

  1. axios

  axios基于http客户端的promise,面向浏览器和nodejs。参考地址: https://www.kancloud.cn/yunye/axios/234845

  特点

    • 浏览器端发起XMLHttpRequests请求

    • node端发起http请求

    • 支持Promise API

    • 监听请求和返回

    • 转化请求和返回

    • 取消请求

    • 自动转化json数据

    • 客户端支持抵御

  安装

    npm install --save axios 

    为了解决post默认使用的是x-www-from-urlencoded 去请求数据,导致请求参数无法传递到后台,所以还需要安装一个插件QS

    npm install qs

  2. easy-mock

  Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务。不需要再本地安装,只需要到官网上注册登陆后加入或新建项目,在项目内定义接口和返回数据的格式。

  地址:https://www.easy-mock.com/login

  步骤如下:

    1)登陆

    

    2)新建项目

    

    3)新建接口,Base URL是访问地址

    

    4)定义接口名称和数据返回格式

    

  这样一个接口就定义好了,我们可以通过请求工具访问,就可以得到 /login中刚定义的数据。更多定义easy-mock返回数据格式的方式,具体请参考官网例子。参考其他例子:https://blog.csdn.net/qq_42991509/article/details/94577331

  二、axios 使用

  axios的实例方法和配置很多,下面只是常用基本的封装和使用方式。

  在vue项目中src文件夹下,有这几个需要新增的地方。

  

  1.  appCount.js文件

const HTTP_BASE_URL = 'https://www.easy-mock.com/mock/5d5f5a3f6778c215243b94ea/'  // easy-mock
const TOKEN = '1234' // token
export default {
  HTTP_BASE_URL,
  TOKEN
}

  在appCount.js文件中,我们可以放一些全局的变量。例如:访问地址的ip、token常量,超时取消请求的时常等。

  2. request.js文件

import axios from 'axios'
import appCONST from './appCount.js'

const requestData  = async (url, params = {}) => {
    let res = await axios({
        url: appCONST.HTTP_BASE_URL + url,
        data: params || {},
        method: params.method || 'POST',
        header: params.header || {
            'content-type': 'application/json'
        }
    })
    console.log(res)
    if(requestSuccess(res)) {
        return res.data
    } else {
        throw requestException(res)
    }
}

/**
 * 请求成功
 */
function requestSuccess(res) {
    const status = res.status
    // 请求错误
    if (status !== 200) {
      return false
    }
    const resData = res.data
    return !(resData && resData.code !== 1)
  }


/**
 * 异常
 */
function requestException(res) {
    const error = {}
    error.serverCode = res.status
    const resData = res.data
    error.code = resData.code
    error.msg = resData.msg || '系统错误'
    error.data = resData.result || {}
    return error
  }

// 导出封装函数
export default {
    requestData
}

  在上面文件中,requestData方法是我们封装的axios请求,在方法中,我并没有使用到安装时qs。因为在方法中定义了请求头content-type的类型是json格式,所以参数格式直接传对象进来就可以了。

  如果没有定义content-type的类型,那么默认是application/x-www-form-urlencoded。请求参数在Form Data中,只能上传键值对,并且键值对都是间隔分开的。

参数形式:  name1=value1&name2=value2。那么最好引入qs,然后将params格式化一下,data:qs.stringify(params)。

  3. util.js

  可以写一些公共的方法,例如:存取本地缓存,参数格式化等方法。然后在需要用到的地方导入这个文件,就可以使用其中的方法了。

  

export const localSave = (key, value) => {
    localStorage.setItem(key, value)
}
  
export const localRead = (key) => {
    return localStorage.getItem(key) || ''
}

  使用方式

<script>
import * as util from '@/libs/util'
export default {
    name: 'login',
    data() {
        return {
           da:'' 
        }
    },
    methods: {
       submit() {
           util.localSave('data', '123')
        }
    }
}
</script>

  4. api.js

import wxRequest from '../libs/request'
// 用户登录
const login = (params) => wxRequest.requestData('login', params)

export default {
    login
}

  5. 调用接口

<template>
    <div>
        <button @click="submit()">点我登陆</button>
    </div>
</template>
<script>
import api from '@/api/api'

export default {
    name: 'login',
    data() {
        return {
           da:'' 
        }
    },
    methods: {
        async submit() {
            try {
                const dd = await api.login()
                console.log(dd)
            } catch(err) {
                console.log(err)
            }
        }
    }
}
</script>

  更多方法,例如添加拦截器也挺好用。

 

 

转载于:https://www.cnblogs.com/freedom-feng/p/11411554.html

相关文章:

  • 扫描器开发框架学习
  • Java多线程实现和JUC介绍
  • git commit撤回操作
  • 内存运行PE文件
  • Mysql数据库
  • Apache Kafka(六)- High Throughput Producer
  • 设计模式-策略模式
  • CTF 资源
  • hibernate的id生成策略
  • Apache Kafka(七)- Kafka ElasticSearch Comsumer
  • Apache Kafka(八)- Kafka Delivery Semantics for Consumers
  • liquibase 注意事项
  • Red Team远程控制软件
  • upload-labs 上传漏洞靶场环境以及writeup
  • Hive on Tez 中 Map 任务的数量计算
  • 【刷算法】从上往下打印二叉树
  • Just for fun——迅速写完快速排序
  • Kibana配置logstash,报表一体化
  • Mybatis初体验
  • tab.js分享及浏览器兼容性问题汇总
  • 浮现式设计
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 试着探索高并发下的系统架构面貌
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 异常机制详解
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • # include “ “ 和 # include < >两者的区别
  • (C++20) consteval立即函数
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (分类)KNN算法- 参数调优
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Unity3DUnity3D在android下调试
  • .NET CLR基本术语
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET下的多线程编程—1-线程机制概述
  • .net中我喜欢的两种验证码
  • .so文件(linux系统)
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [C语言]一维数组二维数组的大小
  • [Geek Challenge 2023] web题解
  • [Godot] 3D拾取
  • [HackMyVM]靶场 Quick3
  • [javascript]Tab menu实现
  • [moka同学笔记]yii表单dropdownlist样式
  • [No000016]为什么假期计划总是做不到?
  • [one_demo_9]判断数组是否递增
  • [PyTorch][chapter 66][强化学习-值函数近似]
  • [Swift]LeetCode856. 括号的分数 | Score of Parentheses