uniapp封装axios的详细过程(大可不必那么麻烦)

 更新时间:2022年10月17日 15:44:31   作者:海海呐  
在uniapp中使用axios进行请求时,uniapp无法使用axios的适配器,下面这篇文章主要给大家介绍了关于uniapp封装axios的详细过程,需要的朋友可以参考下

前言

最近群里的一个小明同学问 uniapp可以使用axios请求吗?我当时就一愣 反问为什么要使用axios,是 uni.request 不香了吗?

小明:因为axios可以像vue的项目一样,在request里面封装巴拉巴拉一堆。

我:那uni.request不也可以吗

小明:可是我不知道 uni.request怎么封装,可以讲讲然后我教教新来的是实习生嘛。

我:那你听仔细了,我只讲这一次。

1.前期准备

前期准备新建一个uniapp项目,新增node小demo (新手自己看,老手直接跳到后面)

1-1 uniapp项目创建

首先我们先创建我们的uniapp项目

打开我们的hbuilderX

文件/1.项目

 然后起名创建

我们的uniapp就创建好了。

1-2 node接口创建

然后在新建我们的接口

首先打开我们的命令窗口

输入命令 npm init  然后一直回车就可以了

 然后新建一个app.js的文件

 然后安装我们的express

yarn add express

在app.js中写入在终端输入node ./app.js 运行

const express  = require('express')
const app = express();
app.listen(3000, () => {
    console.log(`端口:localhost:3000/`)
})

这里可以看见项目成功运行

然后在app.js中写入测试数据

app.get('/list', (req, res) => {
    res.send({
        "code": 0,
        "message": "登录成功",
        "data": {
            "token":"vip"
        }
    })
})

然后重新运行项目打开浏览器输入 http://localhost:3001/list

这样就可以看见我们的测试数据了。到这里我们的后端模拟数据就可以了。项目保持运行状态。

2.uni.request封装

首先我们先创建文件夹utils/request.js

2-1 url_all

在我们的request.js中首先自己定义一个叫 url_all

我们定义的url_all就是我们接口的地址

const url_all = {
	'DEV': 'http://localhost:3001', // 开发
}

我这里这样定义的原因是我们在实际项目开发过程中我们可能会有我们的本地地址,还会有我们的测试地址,还会有我们的线上地址,免得因为这个地址每次打包发布都需要改变这里的地址。我们这里可以给判断,同学们可以自己思考一下该怎么做。如果有不懂的可以联系我帮助解答。

接着往下。

然后定义一个baseurl获取我们的接口地址到底的线上线下还是测试

这里直接写死

let BASEURL = url_all['DEV']

2-2 request

然后下面定义一个加request的函数并导出,有一个参数

export const request =(options={})=>{
}

这里我们需要将request这个函数的内部进行一个请求,然后将数据进行导出 ,

这里问题就来了,如果我们失败的请求想要在外部获取我们可以直接导出吗?

那我们这里就可以考虑使用一个Promise来获取成功与否的状态,

这里直接return一个new的Promise

export const request =(options={})=>{
	return new Promise((resolve,rejects)=>{
        
	})
}

接下来里面就可以写我们的请求了。到这里为了代码的简洁,我们可以将内容部分抽离成一个函数

handleRequest然后将我们的参数options和状态传过去

export const request =(options={})=>{
	return new Promise((resolve,rejects)=>{
		handleRequest(options,resolve,rejects)
	})
}

2-3 handleRequest

首先定义好我们的handleRequest接收三个参数然后就可以直接发送请求

首先看看我们的uni.request

uni.request(OBJECT) | uni-app官网

我们直接进行组合数据然后将我们的状态return出去

// 发起请求
function handleRequest(options, resolve, reject) {
	uni.request({
		url: BASEURL + options.url,
		method: options.method,
		data: options.data,
		success: (response) => {
			return resolve(response.data)
		},
		fail: (fail) => {
			console.log('fail',fail)
			return reject(fail);
		}
	})
}

到这里我们的uni.request其实就已经封装好了,接下里我们来测试一下。

3 api新增

新增文件 api/user.js

import {request} from '@/utils/request.js';
export const users =(options)=>{
	return request({
		url:'/list',
		method:'GET',
		data:options
	})
}

然后找到我们的 pages/index/index.vue 引入测试

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>
 
<script>
	import {users} from '@/api/user.js'
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
		this.user()
		},
		methods: {
			async user(){
				console.log('触发了')
				try{
						const res = await users()
						console.log('res',res)
				}catch(e){
					console.log('catch',e)
					//TODO handle the exception
				}
			
			}
		}
	}
</script>
 
<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}
 
	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}
 
	.text-area {
		display: flex;
		justify-content: center;
	}
 
	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

然后就可以拿到数据

 4.结束

看到这里我们的封装uni.request发送请求就已经完成了,是不是跟axios发送请求没有差别呢?

到此这篇关于uniapp封装axios的文章就介绍到这了,更多相关uniapp封装axios内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序选择图片控件

    微信小程序选择图片控件

    这篇文章主要为大家详细介绍了微信小程序选择图片控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 微信小程序登录按钮遮罩浮层效果的实现方法

    微信小程序登录按钮遮罩浮层效果的实现方法

    这篇文章主要给大家介绍了关于微信小程序登录按钮遮罩浮层效果的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • javascript:void(0)是什么意思示例介绍

    javascript:void(0)是什么意思示例介绍

    Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值,有不了解的朋友可以参考下本文
    2013-11-11
  • 基于javascript的异步编程实例详解

    基于javascript的异步编程实例详解

    这篇文章主要介绍了基于javascript的异步编程,结合实例形式分析了javascript异步编程的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-04-04
  • javascript foreach中如何获取数组下标/index

    javascript foreach中如何获取数组下标/index

    这篇文章主要介绍了javascript foreach中如何获取数组下标/index问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • javascript实例分享---具有立体效果的图片特效

    javascript实例分享---具有立体效果的图片特效

    此实例,直接粘贴代码即可运行,当然图片的路径不要忘记改了。
    2014-06-06
  • JavaScript常用的3种弹出框(提示框 alert/确认框 confirm/输入框 prompt)

    JavaScript常用的3种弹出框(提示框 alert/确认框 confirm/输入框 prompt)

    三种弹框在系统中都是同步执行的,也就是说,三种弹框中的任一弹框弹出,代码都不在执行,直到点击确认或取消,关闭弹窗后,代码继续执行,本文通过实例代码给大家分享JS常用的3种弹出框,感兴趣的朋友一起看看吧
    2022-07-07
  • JavaScript面向对象之体会[总结]

    JavaScript面向对象之体会[总结]

    看过很多JavaScript书,对JavaScript的面向对象讲的都比较深入,但是并没有做到深入浅出,总结了我做的一些JavaScript程序的经验,以简洁明了的文字使大家明白JavaScript面向对象的实现。
    2008-11-11
  • JavaScript实现九宫格抽奖

    JavaScript实现九宫格抽奖

    这篇文章主要为大家详细介绍了JavaScript实现九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 基于JS实现的倒计时程序实例

    基于JS实现的倒计时程序实例

    这篇文章主要介绍了基于JS实现的倒计时程序,实例分析了javascript实现倒计时计数的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07

最新评论