mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 12:56:28 +08:00
优化sdk-nodejs以下功能:
1、新增同步请求方式(executeSync、executeTokenSync); 2、优化请求异常中断问题,返回502错误码; 3、优化签名方法;
This commit is contained in:
@@ -33,44 +33,75 @@ const OpenClient = Class.create({
|
||||
/**
|
||||
* 发送请求
|
||||
* @param request 请求类
|
||||
* @param callback 回调函数,参数json
|
||||
* @param callback 回调函数,参数json(undefined则使用executeSync)
|
||||
*/
|
||||
execute: function (request, callback) {
|
||||
this.executeToken(request, null, callback)
|
||||
if (typeof callback == 'function') {
|
||||
this.executeToken(request, null, callback)
|
||||
} else {
|
||||
return this.executeSync(request)
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 发送同步请求
|
||||
* @param request 请求类
|
||||
* */
|
||||
executeSync: function (request) {
|
||||
return new Promise((resolve) => {
|
||||
this.execute(request, res => {
|
||||
resolve(res)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 发送请求
|
||||
* @param request 请求类
|
||||
* @param token token
|
||||
* @param callback 回调函数,参数json
|
||||
* @param callback 回调函数,参数json(undefined则使用executeTokenSync)
|
||||
*/
|
||||
executeToken: function (request, token, callback) {
|
||||
if (!(request instanceof BaseRequest)) {
|
||||
throw 'request类未继承BaseRequest'
|
||||
}
|
||||
const requestType = request.getRequestType();
|
||||
if (request.files) {
|
||||
this._postFile(request, callback);
|
||||
} else {
|
||||
switch (requestType) {
|
||||
case RequestType.GET:
|
||||
this._get(request, callback);
|
||||
break
|
||||
case RequestType.POST_FORM:
|
||||
this._postForm(request, callback);
|
||||
break
|
||||
case RequestType.POST_JSON:
|
||||
this._postJson(request, callback);
|
||||
break
|
||||
case RequestType.POST_FILE:
|
||||
this._postFile(request, callback);
|
||||
break
|
||||
default :{
|
||||
throw 'request.getRequestType()类型不正确'
|
||||
if (typeof callback == 'function') {
|
||||
const requestType = request.getRequestType();
|
||||
if (request.files) {
|
||||
this._postFile(request, callback);
|
||||
} else {
|
||||
switch (requestType) {
|
||||
case RequestType.GET:
|
||||
this._get(request, callback);
|
||||
break
|
||||
case RequestType.POST_FORM:
|
||||
this._postForm(request, callback);
|
||||
break
|
||||
case RequestType.POST_JSON:
|
||||
this._postJson(request, callback);
|
||||
break
|
||||
case RequestType.POST_FILE:
|
||||
this._postFile(request, callback);
|
||||
break
|
||||
default : {
|
||||
throw 'request.getRequestType()类型不正确'
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return this.executeTokenSync(request, token)
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 发送同步请求
|
||||
* @param request 请求类
|
||||
* @param token token
|
||||
*/
|
||||
executeTokenSync: function (request, token) {
|
||||
return new Promise((resolve) => {
|
||||
this.executeToken(request, token, res => {
|
||||
resolve(res)
|
||||
})
|
||||
})
|
||||
},
|
||||
_get: function(request, callback) {
|
||||
const allParams = this._buildParams(request)
|
||||
const that = this
|
||||
@@ -120,7 +151,13 @@ const OpenClient = Class.create({
|
||||
if (!error && response.statusCode === 200) {
|
||||
return request.parseResponse(response.body)
|
||||
} else {
|
||||
throw '请求异常:' + error
|
||||
// throw '请求异常:' + error
|
||||
return { // 重新封装请求异常回调,以防中断
|
||||
msg: '请求异常',
|
||||
code: '502',
|
||||
sub_msg: `${error}`,
|
||||
sub_code: 'isv.invalid-server'
|
||||
}
|
||||
}
|
||||
},
|
||||
_buildParams: function (request, token) {
|
||||
|
@@ -68,21 +68,22 @@ exports.SignUtil = {
|
||||
*/
|
||||
getSignContent: function (params) {
|
||||
const paramNames = []
|
||||
for(const key in params) {
|
||||
paramNames.push(key)
|
||||
}
|
||||
// 获取对象中的Key
|
||||
paramNames.push(...Object.keys(params || {})
|
||||
// 过滤无效的KeyValue
|
||||
.filter(paramName => {
|
||||
// 参数名不为undefined且参数值不为undefined
|
||||
return !(typeof paramName === undefined || typeof params[paramName] === undefined)
|
||||
}))
|
||||
|
||||
paramNames.sort()
|
||||
|
||||
const paramNameValue = []
|
||||
|
||||
for (let i = 0, len = paramNames.length; i < len; i++) {
|
||||
const paramName = paramNames[i];
|
||||
// 合成签名字符串
|
||||
const paramNameValue = paramNames.map(paramName => {
|
||||
const val = params[paramName];
|
||||
if (paramName && val) {
|
||||
paramNameValue.push(`${paramName}=${val}`)
|
||||
}
|
||||
}
|
||||
return `${paramName}=${val}`
|
||||
})
|
||||
|
||||
return paramNameValue.join('&')
|
||||
}
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@ function test() {
|
||||
// ]
|
||||
|
||||
openClient.execute(request, data => {
|
||||
console.log('异步请求')
|
||||
// 成功
|
||||
if (!data.sub_code) {
|
||||
console.log('成功', data);
|
||||
@@ -37,6 +38,31 @@ function test() {
|
||||
console.error('失败', data)
|
||||
}
|
||||
})
|
||||
|
||||
// 使用Promise进行封装
|
||||
openClient.executeSync(request).then(data => {
|
||||
console.log('同步请求-Promise')
|
||||
// 成功
|
||||
if (!data.sub_code) {
|
||||
console.log('成功', data);
|
||||
} else {
|
||||
console.error('失败', data)
|
||||
}
|
||||
})
|
||||
|
||||
// 使用Async/Await进行封装
|
||||
async function syncRequest () {
|
||||
const data = await openClient.execute(request)
|
||||
console.log('同步请求-Async/Await')
|
||||
// 成功
|
||||
if (!data.sub_code) {
|
||||
console.log('成功', data);
|
||||
} else {
|
||||
console.error('失败', data)
|
||||
}
|
||||
}
|
||||
|
||||
syncRequest()
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user