MirageJs:如果我通过直通调用 api,则无法使用 axios

Posted

技术标签:

【中文标题】MirageJs:如果我通过直通调用 api,则无法使用 axios【英文标题】:MirageJs: cannot use axios if I call api with passthrough 【发布时间】:2021-11-10 20:36:19 【问题描述】:

我有一个应用程序与切片和重击作出反应。 我使用@reduxjs/toolkit,并使用“createSlice”api 创建了切片,并使用“createAsyncThunk”创建了 thunk。

我的想法:

export const loginThunk = createAsyncThunk('login/local', async (loginData: LoginData) => 

    const username, password = loginData;
    
    const l = await axios.post(`$BASE_URL_login/local`, username, password, 
        headers: 'Content-Type': 'application/json'
    )
    return l.data;
)

在我的应用中运行一个带有模拟 api 的 mirage 服务器,并在我的真实服务器上运行一个“直通”。

当我调度“loginThunk”thunk 时,它会在我的减速器中运行“loginThunk.pending”案例并停止。

它永远不会到达履行或拒绝。

如果我在没有运行 mirage 服务器的情况下发送“loginThunk”thunk,它可以工作。

如果我在没有运行 mirage 服务器的情况下调度“loginThunk”thunk,但我使用“fetch”而不是 axios,它可以工作。

好像是axios和mirageJs透传的问题。

有什么想法吗??

非常感谢

【问题讨论】:

嗨@foralobo,你找到解决办法了吗?我遇到了同样的问题,我的调试告诉我,如果我们使用 axios,响应会被伪装者.js 弄乱,miragejs 使用它来劫持调用,但如果我进行提取,传递按预期工作。 这里也一样。看起来问题是在 axios 0.21.2 中引入的 【参考方案1】:

原来问题源于在 axios 0.21.2 中更改的 xhr 适配器。处理程序 request.onreadystatechange 不再添加到请求中(XMLHttpRequest 似乎在您启动 mirageJS 服务器时被重新定义)。

解决方案是创建您自己的适配器 - 基本上复制 lib/adapters/xhr.js 并确保 if 语句的 else 分支通过 - 并在您的 axios 配置中使用它。

【讨论】:

以上是关于MirageJs:如果我通过直通调用 api,则无法使用 axios的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 miragejs db 中的 id 字段

Owin Web API Bearer Token 直通

使用 ASP.NET 和 TFS api 的直通(模拟)身份验证

云调用:一行代码直通微信开放接口能力

MS Access 直通查询更新

IntelliTest实战直通车(下集)