some bugfix

This commit is contained in:
TENCENT\ivinwu
2018-12-21 20:37:41 +08:00
parent 728de2d012
commit 7ecc92fb5e
9 changed files with 119 additions and 50 deletions

2
build/api/init.d.ts vendored
View File

@@ -1,7 +1,7 @@
/// <reference types="wx" />
export interface IInitOption {
codeToSession: ICodeToSessionOptions;
sessionName?: string;
sessionName: string;
urlPerfix?: string | (() => string);
doNotCheckSession?: boolean;
reLoginLimit?: number;

5
build/util/url.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
declare function setParams(url: string, params: object): string;
declare const _default: {
setParams: typeof setParams;
};
export default _default;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "wxapp-session-request",
"version": "1.1.0",
"name": "we-request",
"version": "1.2.0",
"description": "本工具通过拓展小程序的wx.request让开发者通过简单的配置实现自动管理登录态等功能",
"keywords": [
"登录态",

View File

@@ -5,7 +5,7 @@ export interface IInitOption {
/* 用code换取session的CGI配置 */
codeToSession: ICodeToSessionOptions;
/* 储存在localStorage的session名称且CGI请求的data中会自动带上以此为名称的session值可不配置默认为session */
sessionName?: string;
sessionName: string;
/* 请求URL的固定前缀如果配置了后续请求的URL都会自动加上这个前缀如果是函数则为函数的返回值 */
urlPerfix?: string | (() => string);
/* 是否需要调用checkSession验证小程序的登录态过期若业务不需要使用到session_key则可配置为true */
@@ -66,7 +66,7 @@ export interface IInitOption {
/* codeToSession的上报字段名 */
report?: string;
}
export default (params: IInitOption) => {
const config: IInitOption = {...params, ...defaultConfig}

View File

@@ -6,7 +6,8 @@ import cacheManager from './cacheManager'
import sessionManager from './sessionManager'
import errorHandler from './errorHandler'
import responseHandler from './responseHandler'
import durationReporter from "./durationReporter";
import durationReporter from "./durationReporter"
import url from '../util/url'
// 格式化url
function format(url: string) {
@@ -49,8 +50,10 @@ function preDo(obj: TODO) {
})(obj.complete)
}
obj.originUrl = obj.url;
obj.url = format(obj.url);
if(!obj.originUrl) {
obj.originUrl = obj.url;
obj.url = format(obj.url);
}
return obj;
}
@@ -79,23 +82,12 @@ function initialize(obj: TODO, container: TODO) {
// 如果请求不是GET则在URL中自动加上登录态和全局参数
if (obj.method !== "GET") {
if (status.session) {
if (obj.url.indexOf('?') >= 0) {
obj.url += '&' + config.sessionName + '=' + encodeURIComponent(status.session);
} else {
obj.url += '?' + config.sessionName + '=' + encodeURIComponent(status.session);
}
}
// 如果有全局参数则在URL中添加
for (let i in gd) {
if (obj.url.indexOf('?') >= 0) {
obj.url += '&' + i + '=' + gd[i];
} else {
obj.url += '?' + i + '=' + gd[i];
}
let params: any = {};
params[config.sessionName] = status.session;
obj.url = url.setParams(obj.url, params);
}
obj.url = url.setParams(obj.url, gd);
}
durationReporter.start(obj);
@@ -127,6 +119,7 @@ function doRequest(obj: TODO) {
}
function doUploadFile(obj: TODO) {
obj = initialize(obj, 'formData');
obj.count++;
wx.uploadFile({
url: obj.url,

View File

@@ -42,7 +42,7 @@ function response(res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccessCal
requestHandler[method](obj)
}
})
} else if (config.successTrigger!(res.data) && typeof obj.success === "function") {
} else if (config.successTrigger!(res.data)) {
// 接口返回成功码
let realData = null;
try {
@@ -52,7 +52,7 @@ function response(res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccessCal
}
if(!obj.noCacheFlash) {
// 如果为了保证页面不闪烁,则不回调,只是缓存最新数据,待下次进入再用
obj.success(realData);
typeof obj.success === "function" && obj.success(realData);
}
// 缓存存储
cacheManager.set(obj, realData);

28
src/util/url.ts Normal file
View File

@@ -0,0 +1,28 @@
function setParams(url: string, params: object) {
let queryStringIndex = url.indexOf('?');
let kvp: any = {};
if (queryStringIndex >= 0) {
let oldQueryString = url.substr(queryStringIndex + 1).split('&');
for (let i = 0; i < oldQueryString.length; i++) {
let kv = oldQueryString[i].split('=');
kvp[kv[0]] = kv[1]
}
}
kvp = {...kvp, ...params};
let queryString = Object.keys(kvp).map(key => {
return `${key}=${encodeURI(kvp[key])}`
}).join('&');
if (queryStringIndex >= 0) {
return url.substring(0, queryStringIndex + 1) + queryString
} else {
return url + "?" + queryString
}
}
export default {
setParams
}