vue-cli http请求正常,但就是不进入then()方法反而一直进catch()方法

博主在深夜解决了一个前端与后端交互的难题,问题出在HTTP.post请求的.then()未被触发,而是直接进入了.catch()。问题根源在于后端返回的数据在前端显示正常,但HTTP请求的响应拦截器(response interceptor)导致了异常。通过注释掉srcapiindex.js中的响应拦截器相关代码,问题得到解决。这提醒开发者在处理网络请求时要留意响应拦截器的影响。

为这个问题折腾一晚上时间,前端请求后端也能收到,后端返回的数据前端浏览器也能看到,可是这http.post(url, data, {})就是不走.then(),走收集错误的.catch().
在这里是后端返回的数据
这是后端返回的数据
这是前端的代码
这是前端的代码。
解决办法就是找到response interceptor(响应拦截器)代码,在项目的\src\api\index.js路径文件里的这两行代码注释掉。
在这里插入图片描述
完事,睡觉。

在使用 Vue CLI 和 Mock.js 时,若希望拦截带有参数的 HTTP 请求,可以通过正则表达式匹配 URL 并忽略查询参数部分,从而实现对带参数请求的模拟响应。Mock.js 默认会自动处理 URL 中的查询参数,但可以借助正则表达式行灵活的路径匹配。 ### 配置方法 #### 1. 创建 Mock 文件 首先,在项目中创建一个 `mock` 文件夹,并在其中建立一个如 `api.js` 的文件用于存放接口模拟逻辑。 ```javascript // mock/api.js import Mock from 'mockjs'; const data = { list: [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' } ] }; // 拦截 GET 请求,URL 中包含 query 参数 Mock.mock(/\/api\/getList\?.*/, 'get', () => { return { code: 200, data: data.list }; }); ``` 此配置将匹配所有以 `/api/getList?` 开头的 GET 请求,无论其后携带何种查询参数。 #### 2. 在开发环境引入 Mock.js 在 `main.js` 或专门用于开发环境的入口文件中引入 Mock.js 的配置: ```javascript // main.js if (process.env.NODE_ENV === 'development') { require('./mock/api'); } ``` 这样在开发环境中,所有符合条件的请求都会被 Mock.js 拦截并返回预设的数据[^4]。 #### 3. 使用 Axios 发送请求 在组件中使用 Axios 发送请求时,无需更改任何代码,正常调用即可: ```vue <script> import axios from 'axios'; export default { methods: { fetchData() { axios.get('/api/getList?page=1&limit=10') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } } }; </script> ``` 当执行上述请求时,Mock.js 会根据配置拦截该请求并返回模拟数据[^2]。 ### 注意事项 - **正则表达式的写法**:确保正则表达式能够正确匹配 URL 路径和参数格式,避免因路径匹配导致 Mock 失效。 - **环境控制**:仅在开发环境中启用 Mock.js,生产环境应禁用或替换为真实 API 地址。 - **数据动态性**:可结合 Mock.Random 等功能生成动态数据,提升测试的真实性[^5]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值