t-comm
Version:
专业、稳定、纯粹的工具库
66 lines (63 loc) • 2.53 kB
JavaScript
import _typeof from '@babel/runtime/helpers/typeof';
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
import _createClass from '@babel/runtime/helpers/createClass';
/**
* Cocos 端请求域名拼接拦截器
*
* 业务侧调用 `QueryUserInfoClient.QueryUserInfo(...)` 时,
* pb 编译产物里只有 `/pmdtrpc.commcgi.user.user/QueryUserInfo` 这种相对路径,
* 本拦截器负责拼成 `baseUrl + path` 的完整 URL。
*
* 特点:
* - 幂等:第一次执行时备份 `__cocosOriginUrl`,重试时基于它重拼,不会累加
* - 已是 http(s) 的 URL 不动
* - 默认 POST + application/json
*
* 参考 pmd-npm/packages/business/src/network/interceptor/request/cocos/cocosHostInterceptor.ts
*/
var CocosHostInterceptor = /*#__PURE__*/function () {
function CocosHostInterceptor(options) {
_classCallCheck(this, CocosHostInterceptor);
this.options = options;
}
return _createClass(CocosHostInterceptor, [{
key: "interceptor",
value: function interceptor(param) {
var _a, _b;
// 备份原始 url,用于幂等重试
if (param.__cocosOriginUrl === undefined) {
param.__cocosOriginUrl = param.url;
}
var originUrl = param.__cocosOriginUrl || '';
// 若 reqData 带了 addressName + methodName(兼容 gp-next 风格),用它们拼 path
var addressName = ((_a = param.reqData) === null || _a === void 0 ? void 0 : _a.addressName) || '';
var methodName = ((_b = param.reqData) === null || _b === void 0 ? void 0 : _b.methodName) || '';
var path = originUrl;
if (addressName) {
path = "/".concat(addressName.replace(/^\/+/, ''));
if (methodName) {
path += "/".concat(methodName.replace(/^\/+/, ''));
}
}
if (/^https?:\/\//i.test(path)) {
param.url = path;
} else {
var base = (this.options.baseUrl || '').replace(/\/+$/, '');
var normalizedPath = path.startsWith('/') ? path : "/".concat(path);
param.url = base + normalizedPath;
}
// 清理不应进入 body 的字段
if (param.reqData && _typeof(param.reqData) === 'object') {
delete param.reqData.addressName;
delete param.reqData.methodName;
}
// 默认 POST + JSON
param.method = param.method || 'POST';
param.header = Object.assign({
'Content-Type': 'application/json'
}, param.header || {});
return [false, param];
}
}]);
}();
export { CocosHostInterceptor };