api封装的是通过封装get/post/jsonp等请求,使得页面无需直接访问后代而是调用相关方法直接获取相关的后代数据,避免过多的数据处理逻辑,将重点放在数据渲染上。

1,准备阶段

a,首先创建api访问层(文件夹),新建两个文件分别叫axios和api的JavaScript文件。再api文件夹再新建一个文件夹base,用于存放请求路径,新建dev,pro,test,base_url四个js文件。

b,测试接口(github提供的测试接口)

请求地址
https://api.github.com/search/repositories
请求方式:get
参数 q:关键字 sort:排行规则
实参 v(我们通过关键字v来查看) star(关键字为v的相关点赞数进行排行)

2,axios封装

axios地址:http://www.axios-js.com/zh-cn/docs/vue-axios.html

这里是vue-axios的,是axios针对vue封装的接口请求,在这里我们直接封装原生的axios。

下载axios:

npm install axios --save

在axios文件:该文件用于封装请求方法,在此主要封装get和post方法。通过创建axios实例instance 。

import axios from 'axios'
import {BAES_URL} from './base/base_url'
//新建axios实例
const instance = axios.create({
baseURL: BAES_URL,
timeout: 5000,
});
//添加请求拦截器
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);
}); //封装get
let get=async (url,params)=>{
let {data}=await instance.get(url,{params})
return data
}
//封装post
let post=async (url,params)=>{
let {data}=await instance.post(url,params)
return data
}
//导出get和post
export {
get,
post
}

base_url文件用于封装请求路径,在里面有三个不同的路径,方便不同的开发时期切换请求路径。

import { dev } from './dev'
import { pro } from './pro'
import { test } from './test'
let urls={
dev,
pro,
test
}
//通过切换中括号来实现请求路径的切换
export let BAES_URL=urls['dev'].url

一般情况下,我们都是把路径都写在不同的文件中,再引入进来,dev文件用于存放开发阶段时的请求路径,pro文件用于存放生产阶段的请求路径,test用于存放测试阶段的请求路径。

dev文件

export let dev={
name:'开发环境',
url:'https://api.github.com'
}

pro文件:

export let pro={
name:'生产环境',
url:'https://api.github.com'
}

test文件:

export let  test={
name:'测试环境',
url:'https://api.github.com'
}

3,封装api

api就是与后代进行交互的地方,定义了许多的请求方法向后台发请求。

import {get,post} from './axios'
//通过关键字获取star相关排行信息
export let starList=(params)=>{
return get('/search/repositories',params)
}
export let starLists=(params)=>{
return post('/search/repositories',params)
}

4,测试

这里直接通过调用starList方法获取相关后代内容,参数我们为v和star,在app.vue中

<template>
<div id="app">
aaa
<input type="button" value="dianwo" @click="okok">
</div>
</template>
<script>
import { starList } from './api/api'
export default {
data() {
return {
params:{
q:'v',
sort:"stars"
}
}
},
methods:{
async okok(){
let data=await starList(this.params)
console.log(data)
}
}
}
</script>
<style>
</style>

注意因为请求数据过大,如果报错,修改axios文件的timeout时间。

demo下载地址(设置不需要下载币了):https://download.csdn.net/download/qq_31539817/19650962

vue中封装api数据层访问层的更多相关文章

  1. 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理

    在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...

  2. vue中如何实现数据的双向绑定

    vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this ...

  3. 在Vue中由后台数据循环生成多选框CheckBox时的注意事项

    多选框是一种非常常见的功能,有时候我们会根据后台返回的数据进行多选框渲染,之前做项目时遇到循环生成多选框时,v-model绑定的值会随着选中与取消改变,但页面却不会变化 的情况,后来测试了一下,发现多 ...

  4. 在Vue中使用layer.js弹出层插件

    layer.js(mobile)是一个小巧方便的弹出层插件,在之前的apicloud项目中被大量使用,但最近对apicloud的IDE.非常不友好的文档和极低的开发效率深感厌烦,决定弃用然后转向Vue ...

  5. 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式

    搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...

  6. vue 中一些API 或属性的常见用法

    prop 官方解释:Prop 是你可以在组件上注册的一些自定义特性.当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性. 通俗点讲就是:prop是父组件用来传递数据的一个自定义 ...

  7. 如何在项目中封装api

    一般在项目中,会有很多的api请求,无论在vue,angular,还是react中都应该把接口封装起来,方便后期的维护. 1.新建一个api文件 我们可以在项目的分目录下创建一个api文件夹,在这里面 ...

  8. vue中什么样的数据可以是在视图中显示

    1. Vue中不可以添加不存在的属性,因为不存在的属性是没有getter和setter的. <div id="app"> {{msg.a}} {{msg.b}} < ...

  9. vue中修改了数据但视图无法更新的情况[转载]

    我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...

  10. vue中引入json数据,不用本地请求

    1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...

随机推荐

  1. Flask-Limit详细说明:接口限流

    速率限制通常作为服务的防御措施予以实施.服务需要保护自身以免过度使用(无论是有意还是无意),从而保持服务可用性.在Flask项目开发过程中,遇到了需要对接口进行限制的需求,又不想去造轮子,这时候就需要 ...

  2. 在 Flask 项目中配置 Session:简明指南

    在 Flask 项目中配置 Session:简明指南 本文介绍如何在 Flask 项目中配置会话 1. Flask 内置会话 Flask 自带会话管理功能,使用客户端 Cookie 存储会话数据.默认 ...

  3. uniapp+django登录页面实现

    前后端联动 概述 以一个简单的登录功能为例说明,uni-app的前后端交互 项目地址: 效果图 前端页面开发 项目地址: 后端页面开发 项目地址: 其他参考资料 1.Django项目和uni-app项 ...

  4. Mesh快连

    Mesh快连 一.名词解释 Mesh快连是一种由多个节点组成的网络系统,这些节点可以相互连接,形成一个"网状"的结构. 二.如何使用 有线Mesh: 网络拓扑: 设备版本:3.7. ...

  5. CSP-S2019 江西 题解

    为什么有 \(5\) 道题? [CSP-S2019 江西] 和积和 简单化一下式子: \[(n + 1) \times \sum A_i \times B_i - (\sum A_i) \times ...

  6. Scrapy框架(四)--五大核心组件

    scrapy的基本使用我们已经掌握,但是各位心中一定会有些许的疑问,我们在编写scrapy工程的时候,我们只是在定义相关类中的属性或者方法, 但是我们并没有手动的对类进行实例化或者手动调用过相关的方法 ...

  7. PasteSpider的集群组件PasteCluster(让你的项目快速支持集群模式)的思路及实现(含源码)

    PasteSpider是什么? 一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩, Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库,集群部 ...

  8. 前端实现预览PDF

    下载包 npm install react-pdf 我使用的是react-pdf@5.7.2版本 以下例子使用的是react创建的项目 直接上代码=>cv可用,保证高效 1.新增依赖 yarn ...

  9. js沙雕排序之睡眠排序&随机排序

    1.睡眠排序,只要睡的时间多少就可以排序出来不要在乎时间多少 var arr=[4,77,741,41,142,52,244]; var sleepSort=function(arr,callback ...

  10. sqlyog 工具 查看 历史记录

    sqlyog 工具 查看 历史记录 可以查看当前客户端的执行脚本的情况