uniapp微信小程序使用axios(vue3+axios+ts版)

这篇具有很好参考价值的文章主要介绍了uniapp微信小程序使用axios(vue3+axios+ts版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版本号

"vue": "^3.2.45",

 "axios": "^1.4.0",

 "axios-miniprogram-adapter": "^0.3.5",

安装axios及axios适配器,适配小程序

yarn add axios axios-miniprogram-adapter

使用axios

utils创建utils/request.ts文件

import axios from "axios"
import type { AxiosAdapter, AxiosInstance, AxiosPromise, AxiosRequestConfig, AxiosResponse } from "axios";
import mpAdapter from "axios-miniprogram-adapter";
axios.defaults.adapter = mpAdapter as any

interface Result<T = any> {
  code: number | string;
  msg: string;
  data: T;
};

/* declare module 'axios' {
  //如遇到request()方法里的retuen报类型错误,放开这段注释采用这种形式定义返回类型,将上方的Result接口注释
  interface AxiosResponse<T = any> {
    code: number | string;
    msg: string;
    data: T;
  }
  type Result<T = any> = AxiosResponse<T>;
} */

// 导出Request类,可以用来自定义传递配置来创建实例
class HttpRequest {
  baseURL: string;
  timeout: number;

  constructor() {
    this.baseURL = import.meta.env.VITE_BASE_URL;
    this.timeout = 60000
  }

  request<T = any>(options: AxiosRequestConfig): Promise<Result<T>> {
    // axios 实例
    const instance: AxiosInstance = axios.create()
    this.setInterceptors(instance)
    const opts = this.mergeOptions(options)
    return instance(opts)
  }

  get<T = any>(url: string, data?: any, outHeaders = {}): Promise<Result<T>> {
    return this.request<T>({
      method: 'get',
      url,
      params: { ...data }, // get参数可以直接展开
      headers: {}
    })
  }

  post<T = any>(url: string, body = {}, outHeaders = {}): Promise<Result<T>> {
    let data = {
      body,
      header: {}
    }
    return this.request<T>({
      method: 'post',
      url,
      data, // post要求必须传入data属性
    })
  }
  mergeOptions(options: AxiosRequestConfig) {
    //console.log('合并参数', options)
    return {
      baseURL: this.baseURL,
      timeout: this.timeout,
      ...options
    }
  }
  // 设置拦截器
  setInterceptors(instance: AxiosInstance) {
    // 请求拦截器
    instance.interceptors.request.use((config) => {
      uni.showLoading({
        title: '加载中...',
        mask: true
      });

      // 一般会请求拦截里面加token,用于后端的验证
      /*       const token = localStorage.getItem("token")
            config!.headers!.Authorization = token
            config.headers = Object.assign(config.headers, { ...config.headers, token }); */

      return config
    },
      (err: any) => {
        console.log(err, '请求拦截报错');
        uni.hideLoading();
        return Promise.reject(err);
      })

    // 响应拦截器
    instance.interceptors.response.use(
      (res: AxiosResponse) => {
        //res为AxiosResponse类型,含有config\data\headers\request\status\statusText属性
        console.log(res);
        uni.hideLoading();
        let { status, data } = res
        if (status === 200) {
          // return Promise.resolve(data)
          return data
        } else {

        }

      },
      err => {
        console.log('axios报错', err)
        uni.hideLoading(); // 立即关闭加载框
        return Promise.reject(err)
      }
    )
  }
}
// 默认导出Request实例
export default new HttpRequest()

src目录下创建src/api/config文件夹

config文件夹中创建home.ts文件,首页的接口都放在里面统一管理

uniapp微信小程序使用axios(vue3+axios+ts版),uniapp,vue3,前端,uni-app,微信小程序,小程序,vue.js,前端

export default {
  getHomeData: "/frontpage",
}

 和config文件夹同级创建home.ts文件,统一管理请求接口的方法

uniapp微信小程序使用axios(vue3+axios+ts版),uniapp,vue3,前端,uni-app,微信小程序,小程序,vue.js,前端


import axios from '@/utils/request'
import home from './config/home'

export const getHomeData = () => axios.get(home.getHomeData) //无参使用方式
export const getHomeData = options:any => axios.get(home.getHomeData, options) //有参使用方式 options参数可以自行统一定义

在页面中使用,home.vue文件文章来源地址https://www.toymoban.com/news/detail-597444.html

<template>
	<view class="content">
	</view>
</template>

<script setup lang="ts">
import { onMounted, ref } from 'vue'
import { getHomeData } from '@/api/home'


onMounted(() => {
	homeData()
})

const homeData = async () => {
	const { data } = await getHomeData()
	console.log(data, '首页数据+++++++++')
}
</script>

<style lang="scss"></style>

到了这里,关于uniapp微信小程序使用axios(vue3+axios+ts版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp--- 微信小程序 用户隐私新规相关代码调整【vue3+ts+uView框架】

    官方公告地址:https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801 用户隐私保护指引填写说明地址:https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/ 1) 需要在9月15前更新完毕,否则会无法使用获取手机号 手机相册等相关信息。 2) 微信小程序开发工具

    2024年02月09日
    浏览(40)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(39)
  • uniapp+vue3+ts--编写微信小程序对接e签宝签署时跳转刷脸效果(人脸识别)中间页代码

    e签宝内嵌H5方式集成签署页的文档说明:https://open.esign.cn/doc/opendoc/case3/ahb0sg 签署时跳转刷脸效果示意图: 1. 在文件夹新建一个文件,路径为pages/middle/index,并在pages.json中注册。【ps这个路径要跟e签宝后台定义的中间页路径一致】 2.通过上面文档步骤进行相关代码编写,下面

    2024年01月25日
    浏览(35)
  • uniapp vue3中使用webview在微信小程序中实现双向通讯

    直接上图,注意事项是这里 官网链接: https://uniapp.dcloud.net.cn/component/web-view.html 传递方法的话好像只能通过url来传,其它方式不支持,,,我这个参数没做处理,用的话记得把参数做一下处理 也就是说传递数据之后需要 uni.redirectTo({ url: \\\'/pages/testFabric/index\\\' }) 特定时机,当然用

    2024年04月13日
    浏览(34)
  • uniapp 小程序 使用vue3+ts运行项目

    uniapp官网教程:uni-app官网 创建方式有2种 第一种:通过HBuilderX可视化界面创建 第二种:通过vue-cli命令行 注意:若不能直接使用命令下载,可去gitee下载模板使用 下载完模板后进行解压,利用vscode打开文件,会发现报这样的错误👇主要原因是没有下载依赖 解决以上错误:使

    2024年02月13日
    浏览(31)
  • uniapp vue3 微信小程序 项目中使用 websocet、微信小程序真机调试 websocket 报错 errMsg: “Invalid HTTP status.“

    uniapp-websocket官方文档 注意点:需要在确定建立连接后才能去发送数据 这个错误通常是因为小程序 WebSocket 请求的地址没有配置为 HTTPS,而是使用了 HTTP,因此需要注意以下几点: 小程序开发者工具可以支持使用 ws:// 前缀的 WebSocket 地址,但在真机上会因为不安全的原因而无

    2024年01月17日
    浏览(48)
  • uniapp vue3版本+ts使用 vant小程序 组件库

    1.首先从uniapp官网下载vue3版本+ts的模板 2.安装vant微信小程序版本 3.在项目src目录创建wxcomponents文件夹,在wxcomponents文件夹下创建vant文件夹 4.从node_modules文件夹下的@vant文件夹里面的weapp,weapp下的dist文件夹,将dist文件夹里面的文件复制到/wxcomponents/vant 5.全局引用   在 pages

    2024年02月13日
    浏览(41)
  • uniapp 微信小程序axios库的封装及使用

    第一步:安装axios及适配器 安装依赖 需要注意使用uniapp-vue3版本时axios的版本需要0.26.0以下,建议锁版本   axios-miniprogram-adapter 这个依赖主要是适配小程序网络请求的适配器,为了解决uniapp 适配axios请求,避免报adapter is not a function错误 第二步:axios二次封装 在utils文件下新建

    2024年02月11日
    浏览(36)
  • vue3管理系统中后台返回pdf格式的文件流,前端如何预览?以及uniapp微信小程序中后台返回的base64位的pdf文件如何预览?

    后台返回的是base64格式的pdf文件,首先需要解析base64文件的插件 image-tools 1 安装并引入插件 2 封装预览pdf的函数 3 调用接口获取数据

    2024年01月18日
    浏览(46)
  • 【vue3】uniapp 微信小程序 打包优化【超详细】

    使用HBuilder编辑器编译uniapp的项目转为微信小程序,并上传发布项目 微信小程序官网限制发布的主包大小不能超过2mb,我的项目编译后大小为3mb 1.vendor.js文件过大,打包的时候并没有设置为mini版 2.项目的主包太大,并没有分包出去(后面会详细说明如何分包) 1.把微信小程序右

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包