使用axios-mock-adapter后仅Mock请求生效,如何兼顾真实API?
解决axios-mock-adapter拦截真实API的问题
你遇到的核心问题很明确:axios-mock-adapter默认会拦截所有未被显式Mock的请求,导致真实API无法正常调用;而调用mock.restore()会完全移除Mock拦截器,连你需要的Mock接口也跟着失效了。
这里有个精准的解决方案——使用passThrough()方法,让未被Mock匹配的请求直接透传到真实服务器,这样就能同时保留Mock接口和正常调用真实API了。
修改后的代码示例
import * as axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; const mainConfig = require('../../../config/main.js'); const request = (axios as any).create({ baseURL: mainConfig.apiBaseUrl, headers: { 'Content-Type': 'application/json', }, }); const mock = new MockAdapter(request); // 配置需要Mock的接口 mock.onGet('basket').reply(200, { // 这里放入你的Mock响应数据 items: [], total: 0 }); // 关键设置:让所有未被Mock匹配的请求直接走真实服务器 mock.onAny().passThrough(); export default request;
额外技巧:针对特定真实API透传
如果你不想让所有未Mock的请求都透传,只想放行特定的真实API,可以单独配置:
// 只允许这个特定的真实API请求通过 mock.onGet('/api/user/profile').passThrough();
关于Mock的其他操作说明
- 若需要临时清除所有Mock规则(但保留Mock拦截器),可以使用
mock.reset(); - 当完全不需要Mock时,再调用
mock.restore()移除整个拦截器即可。
内容的提问来源于stack exchange,提问作者Platon Efimov
相关产品推荐
相关产品推荐

