uniapp 里面的 axios, 一个有意思的新插件

对于前端来说, axios 的请求拦截器好处就不用多说了, 但是在uniapp里面编译为小程序平台的时候, 我们就用不了axios, 为什么用不了,因为小程序的网络api和web端还是大相径庭的。这样请求拦截器我们自然就无法使用了.

接下来介绍下 @lylajs/uni-app, 在名字中就可以看的出这个包是 lylajs 里面的子包, 它支持多个平台的使用。还有 @lylajs/qq, @lylajs/wx。直接上图

这个包为什么可以适配出这么多的平台呢?原因就在于有一个可以传入的 adapter, 每个人都可以根据自己的平台实现自己的 adapter 方法。可以在截图看到在创建 lyla 实例的时候可以传入自己的适配器。

github代码

我们拿到数据是不是可以自行实现请求了。当然有一些错误回调规范需要注意,都是一些细节,知道思路就行。

github代码

大致的流程就是,lylajs 的 core 方法会将请求数据,请求方法,请求头等东西规范化,然后传给 adapter

如何使用 @lylajs/uni-app

npm install @lylajs/uni-app

ts 复制代码
import { createLyla } from "@lylajs/uni-app";

const { lyla } = createLyla({
  context: null,
  allowGetBody: true, // 此处是为了适配小程序get请求方法是body
  baseUrl: "https://teacher.hexfuture.net",
  hooks:{
    onAfterResponse: [(res) => {
      return res
    }],
    onBeforeRequest: [(config) => {
      config.headers = {
        ...config.headers,
        _name: 'lyla'
      }
      return config
    }]
  }
})

export {
  lyla
}
html 复制代码
<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 { lyla } from '@/utils/request'
export default {
  data() {
    return {
      title: 'Hello',
    }
  },
  onLoad() {
    lyla({
      url: '/lis',
      method: 'GET',
      query: {
        id: 1
      }
    }).then((res) => {
      this.title = res.data
    })
  },
  methods: {},
}
</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>

常见api封装

ts 复制代码
import { lyla } from "@/utils/request";

type Repo = {
  name: string;
  description: string;
  html_url: string;
}

interface Item {
  id: number;
  category: {
    id: number;
    name: string;
  };
  name: string;
  photoUrls: string[];
  tags: {
    id: number;
    name: string;
  }[];
  status: string;
}

export function getRepoList(data: { status: string }) {
  return lyla<Item>({
    method: 'get',
    url: '/pet/findByStatus',
    query: data
  })
}

感兴趣可以去看看。文档地址

相关推荐
中文呀2 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进2 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7424 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿4 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿4 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
拖孩6 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579006 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku6 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding6 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!6 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp