uni-app luch-request 插件拦截器响应error不执行
uni-app luch-request 插件拦截器响应error不执行
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
H5 | HBuilderX 2.9.9+ | |
APP | HBuilderX 2.9.9+ | |
微信小程序 | 2.10.0 | |
支付宝小程序 |
```javascript
function useRequestIns(module) {
const http = new Request()
/* config 为默认全局配置*/
http.setConfig(config => {
config.baseURL = '域名'
config.header = { "Content-Type": "application/json" }
// #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
config.timeout = 20000 // H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
// #endif
return config
})
// 请求前拦截
http.interceptors.request.use(useRequest, useRequestError)
// 请求成功后拦截
http.interceptors.response.use(useResponse, useResponseError)
return http
}
function useRequest(config) {
// 抛出一个错误,这将导致 error 函数被调用
throw new Error('测试请求前拦截 error 是否触发');
}
测试的时候,并没有触发 useRequestError
但是 触发了 useResponseError
不知道是不是作者故意这样,还是说这是个bug
1 回复
在使用 uni-app
的 luch-request
插件时,如果拦截器中的 error
回调没有执行,可能是由于以下几个原因导致的。以下是一些可能的原因及解决方案:
1. 请求未触发错误
确保你的请求确实触发了错误。例如,如果请求成功,error
拦截器自然不会执行。你可以通过模拟一个错误的请求来测试 error
拦截器是否正常工作。
2. 拦截器未正确配置
确保你正确配置了拦截器。以下是一个基本的拦截器配置示例:
import Request from 'luch-request';
const http = new Request();
// 请求拦截器
http.interceptors.request.use(
(config) => {
// 在发送请求之前做些什么
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
http.interceptors.response.use(
(response) => {
// 对响应数据做些什么
return response;
},
(error) => {
// 对响应错误做些什么
return Promise.reject(error);
}
);
export default http;
3. error
回调未正确处理
确保你在 error
回调中正确处理了错误,并且返回了 Promise.reject(error)
,否则后续的 catch
或 error
回调可能不会执行。
http.interceptors.response.use(
(response) => {
return response;
},
(error) => {
console.error('响应错误:', error);
return Promise.reject(error);
}
);
4. 请求未正确使用 catch
如果你在发起请求时没有使用 .catch()
或 try-catch
,那么 error
拦截器中的错误可能不会被捕获。确保你在请求中正确处理了错误:
http.get('/api/some-endpoint')
.then((response) => {
console.log('请求成功:', response);
})
.catch((error) => {
console.error('请求失败:', error);
});
5. 检查网络请求的状态码
有些错误可能是由于网络请求的状态码引起的,例如 404、500 等。确保你检查了这些状态码,并在 error
拦截器中正确处理它们。
http.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (error.response) {
// 服务器返回了错误状态码
console.error('状态码:', error.response.status);
} else if (error.request) {
// 请求已发出,但没有收到响应
console.error('请求未收到响应:', error.request);
} else {
// 其他错误
console.error('错误:', error.message);
}
return Promise.reject(error);
}
);