Files
fitness-coach/miniprogram/utils/request.js
wm 70ff806042 feat: 小程序连接服务器IP + 同步未提交开发
- miniprogram/config.js: BASE_URL 指向 http://192.227.237.8:3001
- 动作标题中文化(nameZh),搜索匹配 name/nameZh/nameEn
- 新增计划/收藏/我的 等页面与组件
- 后端 Docker 化(Dockerfile/.dockerignore)与翻译脚本
- .gitignore 补充 .DS_Store
2026-07-22 14:05:30 +08:00

47 lines
1.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 统一的网络请求封装:所有请求都经过此包装器。
// 受保护接口自动携带 Authorization: Bearer <token>;遇到 401 时由注册的
// 未授权处理器(通常是自动重新登录)处理一次,然后重试原请求。
const { BASE_URL } = require('../config');
let unauthorizedHandler = null;
// 注册「未授权」处理回调(由 auth 模块注入,用于自动重新登录)
function setUnauthorizedHandler(fn) {
unauthorizedHandler = fn;
}
function request({ url, method = 'GET', data = {}, _retry = false }) {
return new Promise((resolve, reject) => {
const token = wx.getStorageSync('access_token');
wx.request({
url: BASE_URL + url,
method,
data,
header: {
'content-type': 'application/json',
...(token ? { Authorization: 'Bearer ' + token } : {})
},
success(res) {
// 401尝试一次自动重新登录后重试
if (res.statusCode === 401 && !_retry && unauthorizedHandler) {
return unauthorizedHandler()
.then((t) => (t ? resolve(request({ url, method, data, _retry: true })) : reject(res)))
.catch(() => reject(res));
}
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data);
} else {
wx.showToast({ title: '请求失败 (' + res.statusCode + ')', icon: 'none' });
reject(res);
}
},
fail(err) {
wx.showToast({ title: '网络错误,请稍后重试', icon: 'none' });
reject(err);
}
});
});
}
module.exports = { request, setUnauthorizedHandler };