我有一个应用程序与切片和重击做出反应。我使用 @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;
})
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,运行一个带有模拟 API 的 Mirage 服务器,并在我的真实服务器上运行“直通”。
当我调度“loginThunk”thunk时,它在我的reducer中运行“loginThunk.pending”案例并停止。
它永远不会被实现或被拒绝。
如果我在没有运行 Mirage 服务器的情况下发送“loginThunk”thunk,它就可以工作。
如果我在没有运行 Mirage 服务器的情况下调度“loginThunk”thunk,但我使用“fetch”而不是 axios,则它可以工作。
看来是 axios 和 mirageJs 直通之间的问题。
有任何想法吗??
太感谢了
我正在尝试设置 Miragejs 服务器,但由于某种原因,该seeds函数未被调用。routes调用另一个服务器函数并正确映射路由。
export default function makeServer({ environment = 'test' } = {}) {
return new Server({
environment,
models: {
user: Model,
diary: Model,
},
seeds(server) {
debugger; // not hit
seedUsers(server);
seedDiaries(server);
},
routes() {
debugger; // hit
this.namespace = 'api';
this.get('/users', (schema) => schema.users.all());
this.get('/diaries', (schema) => {
debugger; // hit
schema.diaries.all();
});
},
});
}
Run Code Online (Sandbox Code Playgroud)
我已尝试复制粘贴提供的示例,但该seeds方法仍然没有被调用。
miragejs 包作为开发包安装,使用的版本是 0.1.40。该makeServer函数在 index.jsx 文件中调用如下:
if (process.env.NODE_ENV === 'development') {
makeServer(); …Run Code Online (Sandbox Code Playgroud) 按照文档,我在里面设置了这个处理程序routes():
this.put(
'/admin/features/error/environment/test',
// @ts-ignore
() => new Response(500, {}, { errors: ['The database went on vacation'] }),
);
Run Code Online (Sandbox Code Playgroud)
Mirage 确实收到了我所设置的内容。这是来自浏览器控制台日志的响应。请注意,尽管500 显示在_bodyInit:
{
"type": "default",
"status": 200,
"ok": true,
"statusText": "",
"headers": {
"map": {
"content-type": "text/plain;charset=UTF-8"
}
},
"url": "",
"bodyUsed": false,
"_bodyInit": 500,
"_bodyText": "[object Number]"
}
Run Code Online (Sandbox Code Playgroud)
请注意,我需要ts-ignore这可能是一条线索。TS 抱怨new Response预计有 0-2 个参数,但得到了 3 个。