wendux / fly

:rocket: Supporting request forwarding and Promise based HTTP client for all JavaScript runtimes.
https://wendux.github.io/dist/#/language
MIT License
3.9k stars 639 forks source link

我搞了一个类似的请求库 #276

Closed xdoer closed 2 years ago

xdoer commented 3 years ago

PreQuest项目,采用了洋葱模型的中间件设计,设计理念是请求内核与上层相分离,附加功能通过注册中间件来实现,项目中针对接口缓存,错误重试,token 失效刷新等常见的场景提供了开箱即用的解决方案, 使用起来相当灵活。

文档地址在这里: https://pre-quest.vercel.app/

这里有个小程序的 demo:

import { create, Prequest } from '@prequest/miniprogram'

// 全局配置
PreQuest.defaults.baseURL = 'http://localhost:3000'

// 微信小程序,创建实例时,也支持传入参数
const prequest = create(wx.request, { http2: true })

// 传入支付宝小程序请求方法,可以支持支付宝平台
const prequest = create(my.request)

// 百度小程序
const prequest = create(swan.request)

//...其他小程序类似

// 实例中间件
prequest.use(async (ctx, next) => {
    console.log(ctx.request) // 请求的参数
    await next()
    console.log(ctx.response)  // 响应的结果
})

prequest.get('/api', { params: { a: 1 } })

prequest('/api')

不止小程序,像快应用,华为鸿蒙等基本都是支持的。

演示在快应用中使用

import fetch from '@system.fetch'

const prequest = create(fetch)

想知道怎么实现的吗?可以查看源代码

此外,项目中针对 XMLHttpRequest 、Fetch、node 端的 http、类小程序都封装了一套请求库,可以按需使用。