react-query 管不到 BFF?alova/server 补上重试限流
· 阅读需 4 分钟
你用 react-query 搭了前端,它的缓存和重试让浏览器那边很顺。后来你起了个 Node BFF 调三个下游服务,这些调用的重试和限流都落在服务端,而 react-query 在那儿根本不跑。这篇划清 react-query 的工作止步于哪、alova/server 从哪接手,并给出两侧的代码。
你用 react-query 搭了前端,它的缓存和重试让浏览器那边很顺。后来你起了个 Node BFF 调三个下游服务,这些调用的重试和限流都落在服务端,而 react-query 在那儿根本不跑。这篇划清 react-query 的工作止步于哪、alova/server 从哪接手,并给出两侧的代码。
你跑着一个 Node BFF,夹在前端和三个下游服务中间。某天下午最大的那个下游开始回 429,你的 BFF 对每个 429 的回应是:立刻把同一个请求再发一遍。一分钟之内,下游被「它已经拒绝过的请求的重试」埋了,你的前端看到一整面 500。这场景熟不熟悉?
选数据请求库,通常开头都是「谁的缓存更好」。这个问题跳过了一个事后才咬人的点:你的请求到底跑在哪?
一句话:它们是分层关系,不是二选一。 axios 是 HTTP 客户端,负责把请求发出去;alova 是请求策略层,负责「怎么请求」——分页、缓存、重试、去重、token 刷新。alova 可以把 axios 用作请求适配器(@alova/adapter-axios),所以选 alova 从来不意味着扔掉 axios。
你大概也在 uni-app 项目里写过这样的分页加载——onReachBottom 里加一页、发请求、拼数组: