如请求了list接口然后返回401token过期然后在调用login接口登录 如何在请求一次刚刚失败的list请求?
时间: 2024-10-16 09:09:53 浏览: 23
api前台接口文档.doc
当你请求列表接口(`list`)时,若收到 `401 Unauthorized`(表示token已过期)错误,你需要先尝试通过登录接口(`login`)获取新的token,然后再重试原来的列表请求。下面是处理这种场景的一个通用流程:
1. **处理错误**:
- 当接收到 `401` 错误时,捕获这个异常,并记录日志。
2. **触发登录操作**:
- 创建一个新的 `uni.request`,设置URL为登录接口,携带必要的表单数据或者使用之前的用户名密码,发起登录请求。
```javascript
async function login() {
try {
const response = await uni.request({
url: '/login', // 替换为实际登录API地址
data: {
username: 'user', // 用户名
password: 'password' // 密码
},
method: 'POST'
});
if (response.statusCode === 200) {
// 登录成功,获取新token
const newToken = response.data.token;
// 存储新token
uni.setStorageSync('token', newToken);
} else {
throw new Error('Login failed');
}
} catch (error) {
console.error('Error during login:', error.message);
}
}
```
3. **重试列表请求**:
- 登录成功后,等待一段时间(如果有必要,可以添加一个延时或者使用定时器),然后重新发起列表请求,这次带上新的token。
```javascript
setTimeout(() => {
login().then(() => {
// 重新请求列表接口
uni.request({
url: '/list', // 替换为实际列表API地址
data: {},
headers: { Authorization: `Bearer ${uni.getStorageSync('token')}` }, // 添加新的token头
method: 'GET'
}).catch((err) => {
console.error('Failed to retry list request:', err);
});
});
}, 2000); // 示例中的延迟2秒,可根据需求调整
```
4. **考虑用户体验**:
- 可能需要显示一个加载状态或消息给用户,让他们知道正在重试或者登录中。
阅读全文