From 99b052dca1da7d2723e6f7aa638c1a5883ff1845 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Thu, 09 Jun 2022 11:19:48 +0800 Subject: [PATCH] 完善主机地址管理工具 --- bases/Fetcher.js | 36 ++++++----- bases/HostBoot.js | 107 ++++++++++++++++++++--------------- 2 files changed, 80 insertions(+), 63 deletions(-) diff --git a/bases/Fetcher.js b/bases/Fetcher.js index cc10077..81e27e2 100644 --- a/bases/Fetcher.js +++ b/bases/Fetcher.js @@ -19,15 +19,6 @@ this._data = { urlPrefix: options.urlPrefix || ['/api/common/', '/api/common/'], }; - // mock 模式转换地址 - if ($hostBoot.isOnMock()) { - this._defaultConfig.url += (project.host.assetsPath.indexOf('..') === 0 ? '/' : '') + - project.host.assetsPath.replace('/assets', '/mocks'); - } - // 正常模式 - else { - this._defaultConfig.url = ''; - } } /** @@ -141,23 +132,18 @@ const header = { ...this._defaultConfig.header, }; + // 小程序中追加 cookie if (process.env.TARO_ENV === 'weapp') { header['Cookie'] = this._getCookies(); - } - // 如果指定了主机名,使用固定主机地址,否则使用默认地址 - let urlPrefix = ''; - if (options.hostName) { - urlPrefix = $hostBoot.getHost(options.hostName) + this._defaultConfig.url; - } else { - urlPrefix = $hostBoot.getHost() + this._defaultConfig.url; } Taro.request({ ...this._defaultConfig, header, - url: urlPrefix + url, + url: this._createUrlPrefix(options) + url, method: type.toUpperCase(), data, success: response => { + // 小程序中保存 cookie if (process.env.TARO_ENV === 'weapp') { this._saveCookies(response.cookies); } @@ -184,6 +170,22 @@ }); } + _createUrlPrefix(options) { + // 如果指定了主机类,使用固定主机类型地址,否则使用默认主机类型地址 + let urlPrefix = ''; + if (options.hostType) { + urlPrefix = $hostBoot.getHost(options.hostType); + } else { + urlPrefix = $hostBoot.getHost(); + } + // mock 模式转换地址 + if ($hostBoot.isOnMock()) { + urlPrefix += (project.host.assetsPath.indexOf('..') === 0 ? '/' : '') + + project.host.assetsPath.replace('/assets', '/mocks'); + } + return urlPrefix; + } + // 小程序中,保存 cookies _saveCookies(cookies) { const localCookies = JSON.parse(Taro.getStorageSync('cookies') || '{}'); diff --git a/bases/HostBoot.js b/bases/HostBoot.js index 15d8d88..41a9460 100644 --- a/bases/HostBoot.js +++ b/bases/HostBoot.js @@ -14,23 +14,26 @@ constructor() { this._data = { // 可用主机列表 - hostList: { ...project.host.hosts }, + hostList: { + ...project.host.hosts, + }, // 当前主机 activeHost: {}, - defaultHostName: '', + // 默认服务类型 + defaultHostType: '', }; } /** - * 创建主机地址 - * @param {string} hostName - * @param {string} [isDefault=false] + * 创建主机类型 + * @param {string} typeName + * @param {boolean} [isDefault=false] */ - createHost(hostName, isDefault = false) { + createHostType(typeName, isDefault = false) { if (isDefault === 'default') { - this._data.defaultHostName = hostName; + this._data.defaultHostType = typeName; } - const defaultTypeName = this.isDevMod() ? project.host.devType : project.host.serverType; + const defaultHostName = this.isDevMod() ? project.host.devHost : project.host.buildHost; // 网页模式 if (process.env.TARO_ENV === 'h5') { // 如果网址参数有指定服务器 @@ -41,78 +44,90 @@ const portal = server.split('//')[0]; const domain = server.split('//')[1].split('/')[0]; const host = portal + '//' + domain; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), + this._data.activeHost[typeName] = { + name: this._matchHostName(host), host, + type: typeName, }; } // 如果有匹配服务器,使用指定的服务器地址 if (typeof this._data.hostList[server] !== 'undefined') { - this._data.activeHost[hostName] = { - typeName: server, + this._data.activeHost[typeName] = { + name: server, host: this._data.hostList[server], + type: typeName, }; } // 否则使用默认 else { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; } } // 网页域名提取服务器地址 else if (window.location.protocol.indexOf('http') >= 0) { const host = window.location.protocol + '//' + window.location.host; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), + this._data.activeHost[typeName] = { + name: this._matchHostName(host), host, + type: typeName, }; } // 既不指定server也不是域名访问,使用设置的服务器地址 else { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; } } // 小程序模式 else if (process.env.TARO_ENV === 'weapp') { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; } } - _matchTypeName(host) { + _matchHostName(host) { const domain = host.split('//')[1]; - let typeName = ''; + let hostName = ''; if (/127|192|localhost/.test(domain)) { - typeName = 'lc'; + hostName = 'lc'; } else { - typeName = domain.substr(0, 2); + hostName = domain.substr(0, 2); } // 尝试匹配已有主机名称 Object.keys(this._data.hostList).forEach(key => { if (this._data.hostList[key] === host) { - typeName = key; + hostName = key; } }); - return typeName; + return hostName; } /** - * 更新主机 - * @param {string} hostName + * 更新主机类型 + * @param {string} typeName * @param {string} host */ - updateHost(hostName, host) { - hostName = hostName ? hostName : this._data.defaultHostName; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), - host, + updateHostType(typeName, host) { + if (!typeName) { + return; + } + const portal = host.split('//')[0]; + const domain = host.split('//')[1].split('/')[0]; + const host2 = portal + '//' + domain; + this._data.activeHost[typeName] = { + name: this._matchHostName(host), + host: host2, + type: typeName, }; } @@ -134,31 +149,31 @@ /** * 获取当前主机地址 - * @param {string} [hostName] + * @param {string} [typeName] * @return {string} */ - getHost(hostName = this._data.defaultHostName) { - if (typeof this._data.activeHost[hostName] === 'undefined') { + getHost(typeName = this._data.defaultHostType) { + if (typeof this._data.activeHost[typeName] === 'undefined') { return ''; } - return this._data.activeHost[hostName].host; + return this._data.activeHost[typeName].host; } /** * 获取当前主机类型简称 - * @param {string} [hostName] + * @param {string} [typeName] * @return {string} */ - getTypeName(hostName = this._data.defaultHostName) { - if (typeof this._data.activeHost[hostName] === 'undefined') { + getHostName(typeName = this._data.defaultHostType) { + if (typeof this._data.activeHost[typeName] === 'undefined') { return ''; } - return this._data.activeHost[hostName].typeName; + return this._data.activeHost[typeName].name; } - isOnMock(){ + isOnMock() { if (this.isDevMod()) { - return this.getTypeName() === 'lc'; + return this.getHostName() === 'lc'; } else { return false; } -- Gitblit v1.9.1