feat(B批收尾): B1门禁可信/B7-1菜单环防护/B2空值守卫/B7-2分页/B7-3字段清洗/B3空态/B4索引key/B5-3 comment三集合选A新建schema(漂移清零)/B6清理+admin配置+changelog
This commit is contained in:
@@ -1,192 +1,159 @@
|
||||
'use strict';
|
||||
module.exports = async (event, context) => {
|
||||
/**
|
||||
* 检测升级 使用说明
|
||||
* 上传包:
|
||||
* 1. 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
|
||||
* 2. 先从数据库取出所有该平台(从上下文读取平台信息,默认 Andriod)的所有线上发行更新
|
||||
* 3. 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
|
||||
* 4. 使用上步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新,必须同时大于这两项,否则返回暂无更新
|
||||
* 5. 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
|
||||
* 6. is_uniapp_x 为了区分 App 类型,uni-app x 项目安卓端没有 wgt 升级
|
||||
*/
|
||||
|
||||
let {
|
||||
appid,
|
||||
appVersion,
|
||||
wgtVersion,
|
||||
is_uniapp_x = false
|
||||
} = event;
|
||||
|
||||
const platform_Android = 'Android';
|
||||
const platform_iOS = 'iOS';
|
||||
const platform_Harmony = 'Harmony';
|
||||
const package_app = 'native_app';
|
||||
const package_wgt = 'wgt';
|
||||
const app_version_db_name = 'opendb-app-versions'
|
||||
|
||||
let platform = platform_Android;
|
||||
|
||||
// 云函数URL化请求
|
||||
if (event.headers) {
|
||||
let body;
|
||||
try {
|
||||
if (event.httpMethod.toLocaleLowerCase() === 'get') {
|
||||
body = event.queryStringParameters;
|
||||
} else {
|
||||
body = JSON.parse(event.body);
|
||||
}
|
||||
} catch (e) {
|
||||
return {
|
||||
code: 500,
|
||||
msg: '请求错误'
|
||||
};
|
||||
}
|
||||
|
||||
appid = body.appid;
|
||||
appVersion = body.appVersion;
|
||||
wgtVersion = body.wgtVersion;
|
||||
|
||||
if (/iPhone|iPad/.test(event.headers)) {
|
||||
platform = platform_iOS
|
||||
} else if (/Android|android/.test(event.headers)) {
|
||||
platform = platform_Android
|
||||
} else {
|
||||
platform = platform_Harmony
|
||||
}
|
||||
} else if (context.OS) {
|
||||
platform = context.OS === 'android' ?
|
||||
platform_Android :
|
||||
context.OS === 'ios' ?
|
||||
platform_iOS :
|
||||
context.OS === 'harmonyos' ?
|
||||
platform_Harmony :
|
||||
platform_Android;
|
||||
}
|
||||
|
||||
if (appid && appVersion && wgtVersion && platform) {
|
||||
const collection = uniCloud.database().collection(app_version_db_name);
|
||||
|
||||
const record = await collection.where({
|
||||
appid,
|
||||
platform,
|
||||
stable_publish: true
|
||||
})
|
||||
.orderBy('create_date', 'desc')
|
||||
.get();
|
||||
|
||||
if (record && record.data && record.data.length > 0) {
|
||||
const appVersionInDb = record.data.find(item => item.type === package_app) || {};
|
||||
const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {};
|
||||
const hasAppPackage = !!Object.keys(appVersionInDb).length;
|
||||
const hasWgtPackage = !!Object.keys(wgtVersionInDb).length;
|
||||
|
||||
// 取两个版本中版本号最大的包,版本一样,使用wgt包
|
||||
let stablePublishDb = (() => {
|
||||
// uni-app x 项目安卓端没有 wgt 升级
|
||||
if (is_uniapp_x === true && platform === platform_Android) {
|
||||
if (hasAppPackage) return appVersionInDb
|
||||
return {}
|
||||
}
|
||||
if (hasAppPackage && hasWgtPackage) {
|
||||
if (compare(wgtVersionInDb.version, appVersionInDb.version) >= 0)
|
||||
return wgtVersionInDb
|
||||
else {
|
||||
return appVersionInDb
|
||||
}
|
||||
} else if (hasAppPackage) {
|
||||
return appVersionInDb
|
||||
} else if (hasWgtPackage) {
|
||||
return wgtVersionInDb
|
||||
}
|
||||
return {}
|
||||
})();
|
||||
|
||||
if (Object.keys(stablePublishDb).length) {
|
||||
const {
|
||||
version,
|
||||
min_uni_version
|
||||
} = stablePublishDb;
|
||||
|
||||
// 库中的version必须满足同时大于appVersion和wgtVersion才行,因为上次更新可能是wgt更新
|
||||
const appUpdate = compare(version, appVersion) === 1; // app包可用更新
|
||||
const wgtUpdate = compare(version, wgtVersion) === 1; // wgt包可用更新
|
||||
|
||||
if (appUpdate && wgtUpdate) {
|
||||
// 判断是否可用wgt更新
|
||||
if (min_uni_version && compare(min_uni_version, appVersion) < 1) {
|
||||
return {
|
||||
code: 101,
|
||||
message: 'wgt更新',
|
||||
...stablePublishDb
|
||||
};
|
||||
} else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) {
|
||||
return {
|
||||
code: 102,
|
||||
message: '整包更新',
|
||||
...appVersionInDb
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
message: '当前版本已经是最新的,不需要更新'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
code: -101,
|
||||
message: '暂无更新或检查appid是否填写正确'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
code: -102,
|
||||
message: '请检查传参是否填写正确'
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 对比版本号,如需要,请自行修改判断规则
|
||||
* 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
|
||||
* @param {Object} v1
|
||||
* @param {Object} v2
|
||||
* v1 > v2 return 1
|
||||
* v1 < v2 return -1
|
||||
* v1 == v2 return 0
|
||||
*/
|
||||
function compare(v1 = '0', v2 = '0') {
|
||||
v1 = String(v1).split('.')
|
||||
v2 = String(v2).split('.')
|
||||
const minVersionLens = Math.min(v1.length, v2.length);
|
||||
|
||||
let result = 0;
|
||||
for (let i = 0; i < minVersionLens; i++) {
|
||||
const curV1 = Number(v1[i])
|
||||
const curV2 = Number(v2[i])
|
||||
|
||||
if (curV1 > curV2) {
|
||||
result = 1
|
||||
break;
|
||||
} else if (curV1 < curV2) {
|
||||
result = -1
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result === 0 && (v1.length !== v2.length)) {
|
||||
const v1BiggerThenv2 = v1.length > v2.length;
|
||||
const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
|
||||
for (let i = minVersionLens; i < maxLensVersion.length; i++) {
|
||||
const curVersion = Number(maxLensVersion[i])
|
||||
if (curVersion > 0) {
|
||||
v1BiggerThenv2 ? result = 1 : result = -1
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
'use strict';
|
||||
|
||||
const platformAndroid = 'Android';
|
||||
const platformIOS = 'iOS';
|
||||
const platformHarmony = 'Harmony';
|
||||
const packageApp = 'native_app';
|
||||
const packageWgt = 'wgt';
|
||||
const appVersionDbName = 'opendb-app-versions';
|
||||
|
||||
function errorResult(code, message) {
|
||||
return { code, message };
|
||||
}
|
||||
|
||||
function isNonEmptyString(value) {
|
||||
return typeof value === 'string' && value.trim().length > 0;
|
||||
}
|
||||
|
||||
function isValidVersion(value) {
|
||||
return isNonEmptyString(value) && /^\d+(?:\.\d+)*$/.test(value.trim());
|
||||
}
|
||||
|
||||
function parseHttpEvent(event) {
|
||||
if (!event || typeof event !== 'object' || Array.isArray(event)) {
|
||||
return { error: errorResult(-102, '请求参数必须是对象') };
|
||||
}
|
||||
if (!event.headers) return { data: event, isHttp: false };
|
||||
|
||||
const method = String(event.httpMethod || 'GET').toLowerCase();
|
||||
let body;
|
||||
try {
|
||||
if (method === 'get') {
|
||||
body = event.queryStringParameters || {};
|
||||
if (typeof body === 'string') body = JSON.parse(body || '{}');
|
||||
} else if (event.body && typeof event.body === 'object') {
|
||||
body = event.body;
|
||||
} else {
|
||||
body = JSON.parse(event.body || '{}');
|
||||
}
|
||||
} catch (e) {
|
||||
return { error: errorResult(-102, '请求参数格式错误') };
|
||||
}
|
||||
if (!body || typeof body !== 'object' || Array.isArray(body)) {
|
||||
return { error: errorResult(-102, '请求参数必须是对象') };
|
||||
}
|
||||
|
||||
return {
|
||||
data: { ...event, ...body },
|
||||
isHttp: true
|
||||
};
|
||||
}
|
||||
|
||||
function detectPlatform(event, context, isHttp) {
|
||||
if (isHttp) {
|
||||
const headers = typeof event.headers === 'string' ?
|
||||
event.headers : JSON.stringify(event.headers || {});
|
||||
if (/iPhone|iPad/i.test(headers)) return platformIOS;
|
||||
if (/Android/i.test(headers)) return platformAndroid;
|
||||
if (/HarmonyOS|Harmony/i.test(headers)) return platformHarmony;
|
||||
}
|
||||
|
||||
const os = context && typeof context.OS === 'string' ? context.OS.toLowerCase() : '';
|
||||
if (os === 'ios') return platformIOS;
|
||||
if (os === 'harmonyos') return platformHarmony;
|
||||
return platformAndroid;
|
||||
}
|
||||
|
||||
module.exports = async (event, context) => {
|
||||
const parsed = parseHttpEvent(event);
|
||||
if (parsed.error) return parsed.error;
|
||||
|
||||
const request = parsed.data;
|
||||
const appid = request.appid;
|
||||
const appVersion = request.appVersion;
|
||||
const wgtVersion = request.wgtVersion;
|
||||
const isUniappX = request.is_uniapp_x === undefined ? false : request.is_uniapp_x;
|
||||
if (!isNonEmptyString(appid) || !isValidVersion(appVersion) || !isValidVersion(wgtVersion)) {
|
||||
return errorResult(-102, '请检查appid、appVersion、wgtVersion是否填写正确');
|
||||
}
|
||||
if (isUniappX !== true && isUniappX !== false) {
|
||||
return errorResult(-102, 'is_uniapp_x必须是布尔值');
|
||||
}
|
||||
|
||||
const platform = detectPlatform(request, context, parsed.isHttp);
|
||||
try {
|
||||
const collection = uniCloud.database().collection(appVersionDbName);
|
||||
const record = await collection.where({
|
||||
appid: appid.trim(),
|
||||
platform,
|
||||
stable_publish: true
|
||||
}).orderBy('create_date', 'desc').get();
|
||||
|
||||
if (!record || !Array.isArray(record.data) || record.data.length === 0) {
|
||||
return errorResult(-101, '暂无更新或检查appid是否填写正确');
|
||||
}
|
||||
|
||||
const appVersionInDb = record.data.find(item => item && item.type === packageApp) || {};
|
||||
const wgtVersionInDb = record.data.find(item => item && item.type === packageWgt) || {};
|
||||
const hasAppPackage = isValidVersion(appVersionInDb.version);
|
||||
const hasWgtPackage = isValidVersion(wgtVersionInDb.version);
|
||||
|
||||
let stablePublishDb = {};
|
||||
if (isUniappX === true && platform === platformAndroid) {
|
||||
if (hasAppPackage) stablePublishDb = appVersionInDb;
|
||||
} else if (hasAppPackage && hasWgtPackage) {
|
||||
stablePublishDb = compare(wgtVersionInDb.version, appVersionInDb.version) >= 0 ?
|
||||
wgtVersionInDb : appVersionInDb;
|
||||
} else if (hasAppPackage) {
|
||||
stablePublishDb = appVersionInDb;
|
||||
} else if (hasWgtPackage) {
|
||||
stablePublishDb = wgtVersionInDb;
|
||||
}
|
||||
|
||||
if (Object.keys(stablePublishDb).length > 0) {
|
||||
const { version, min_uni_version: minUniVersion } = stablePublishDb;
|
||||
const appUpdate = compare(version, appVersion) === 1;
|
||||
const wgtUpdate = compare(version, wgtVersion) === 1;
|
||||
|
||||
if (appUpdate && wgtUpdate) {
|
||||
if (isValidVersion(minUniVersion) && compare(minUniVersion, appVersion) < 1) {
|
||||
return {
|
||||
code: 101,
|
||||
message: 'wgt更新',
|
||||
...stablePublishDb
|
||||
};
|
||||
}
|
||||
if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) {
|
||||
return {
|
||||
code: 102,
|
||||
message: '整包更新',
|
||||
...appVersionInDb
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { code: 0, message: '当前版本已经是最新的,不需要更新' };
|
||||
} catch (e) {
|
||||
console.error('[checkVersion]', e);
|
||||
return errorResult(-500, '检查版本失败');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 对比版本号。v1 > v2 返回 1,v1 < v2 返回 -1,版本相同返回 0。
|
||||
*/
|
||||
function compare(v1 = '0', v2 = '0') {
|
||||
const left = String(v1).split('.').map(Number);
|
||||
const right = String(v2).split('.').map(Number);
|
||||
const length = Math.max(left.length, right.length);
|
||||
for (let i = 0; i < length; i++) {
|
||||
const leftPart = Number.isFinite(left[i]) ? left[i] : 0;
|
||||
const rightPart = Number.isFinite(right[i]) ? right[i] : 0;
|
||||
if (leftPart > rightPart) return 1;
|
||||
if (leftPart < rightPart) return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
module.exports.compare = compare;
|
||||
|
||||
@@ -1,110 +1,148 @@
|
||||
'use strict';
|
||||
const uniID = require('uni-id-common')
|
||||
const success = { success: true }
|
||||
const fail = { success: false }
|
||||
const checkVersion = require('./checkVersion')
|
||||
|
||||
async function checkPermission(uniIDIns, uniIdToken, permission) {
|
||||
const checkTokenRes = await uniIDIns.checkToken(uniIdToken)
|
||||
if (checkTokenRes.errCode === 0) {
|
||||
if (checkTokenRes.permission.indexOf(permission) > -1 || checkTokenRes.role.indexOf('admin') > -1) {
|
||||
return true
|
||||
} else {
|
||||
return Object.assign({ errMsg: '权限不足' }, fail)
|
||||
}
|
||||
} else {
|
||||
return Object.assign({}, checkTokenRes, { errMsg: checkTokenRes.message }, fail)
|
||||
}
|
||||
}
|
||||
|
||||
exports.main = async (event, context) => {
|
||||
//event为客户端上传的参数
|
||||
|
||||
const db = uniCloud.database()
|
||||
const appListDBName = 'opendb-app-list'
|
||||
const appVersionDBName = 'opendb-app-versions'
|
||||
const uniIDIns = uniID.createInstance({ context: context })
|
||||
let res = {};
|
||||
|
||||
if (event.headers) {
|
||||
try {
|
||||
if (event.httpMethod.toLocaleLowerCase() === 'get') {
|
||||
event = event.queryStringParameters;
|
||||
} else {
|
||||
event = JSON.parse(event.body);
|
||||
}
|
||||
} catch (e) {
|
||||
return {
|
||||
code: 500,
|
||||
msg: '请求错误'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let params = event.data || event.params;
|
||||
switch (event.action) {
|
||||
case 'checkVersion':
|
||||
res = await checkVersion(event, context)
|
||||
break;
|
||||
case 'deleteFile':
|
||||
let checkDeletePermission = await checkPermission(uniIDIns, event.uniIdToken, 'DELETE_OPENDB_APP_VERSIONS')
|
||||
if (checkDeletePermission === true) {
|
||||
res = await uniCloud.deleteFile({ fileList: params.fileList })
|
||||
} else {
|
||||
return checkDeletePermission
|
||||
}
|
||||
break;
|
||||
case 'setNewAppData':
|
||||
let checkUpdatePermission = await checkPermission(uniIDIns, event.uniIdToken, 'UPDATE_OPENDB_APP_LIST')
|
||||
if (checkUpdatePermission === true) {
|
||||
params.value.create_date = Date.now()
|
||||
res = await db.collection(appListDBName).doc(params.id).set(params.value)
|
||||
} else {
|
||||
return checkUpdatePermission
|
||||
}
|
||||
break;
|
||||
case 'getAppInfo':
|
||||
let dbAppList
|
||||
try {
|
||||
dbAppList = db.collection(appListDBName)
|
||||
} catch (e) {}
|
||||
|
||||
if (!dbAppList) return fail;
|
||||
|
||||
const dbAppListRecord = await dbAppList.where({
|
||||
appid: params.appid
|
||||
}).get()
|
||||
|
||||
if (dbAppListRecord && dbAppListRecord.data.length)
|
||||
return Object.assign({}, success, dbAppListRecord.data[0])
|
||||
|
||||
//返回数据给客户端
|
||||
return fail
|
||||
break;
|
||||
case 'getAppVersionInfo':
|
||||
let dbVersionList
|
||||
try {
|
||||
dbVersionList = db.collection(appVersionDBName)
|
||||
} catch (e) {}
|
||||
|
||||
if (!dbVersionList) return fail;
|
||||
|
||||
const dbVersionListrecord = await dbVersionList.where({
|
||||
appid: params.appid,
|
||||
platform: params.platform,
|
||||
type: "native_app",
|
||||
stable_publish: true
|
||||
})
|
||||
.orderBy('create_date', 'desc')
|
||||
.get();
|
||||
|
||||
if (dbVersionListrecord && dbVersionListrecord.data && dbVersionListrecord.data.length > 0)
|
||||
return Object.assign({}, dbVersionListrecord.data[0], success)
|
||||
|
||||
return fail
|
||||
break;
|
||||
}
|
||||
|
||||
//返回数据给客户端
|
||||
return res
|
||||
};
|
||||
'use strict';
|
||||
|
||||
const uniID = require('uni-id-common');
|
||||
const checkVersion = require('./checkVersion');
|
||||
|
||||
const success = { success: true };
|
||||
const fail = { success: false };
|
||||
const appListDBName = 'opendb-app-list';
|
||||
const appVersionDBName = 'opendb-app-versions';
|
||||
|
||||
function errorResult(code, message, extra = {}) {
|
||||
return { ...fail, code, msg: message, ...extra };
|
||||
}
|
||||
|
||||
function isObject(value) {
|
||||
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
||||
}
|
||||
|
||||
function isNonEmptyString(value) {
|
||||
return typeof value === 'string' && value.trim().length > 0;
|
||||
}
|
||||
|
||||
function parseRequest(event) {
|
||||
if (!isObject(event)) return { error: errorResult(400, '请求参数必须是对象') };
|
||||
if (!event.headers) return { data: event };
|
||||
|
||||
const method = String(event.httpMethod || 'GET').toLowerCase();
|
||||
let payload;
|
||||
try {
|
||||
if (method === 'get') {
|
||||
payload = event.queryStringParameters || {};
|
||||
if (typeof payload === 'string') payload = JSON.parse(payload || '{}');
|
||||
} else if (event.body && typeof event.body === 'object') {
|
||||
payload = event.body;
|
||||
} else {
|
||||
payload = JSON.parse(event.body || '{}');
|
||||
}
|
||||
} catch (e) {
|
||||
return { error: errorResult(400, '请求参数格式错误') };
|
||||
}
|
||||
if (!isObject(payload)) return { error: errorResult(400, '请求参数必须是对象') };
|
||||
return { data: { ...event, ...payload } };
|
||||
}
|
||||
|
||||
function getParams(event) {
|
||||
if (isObject(event.data)) return event.data;
|
||||
if (isObject(event.params)) return event.params;
|
||||
return {};
|
||||
}
|
||||
|
||||
async function checkPermission(uniIDIns, uniIdToken, permission) {
|
||||
if (!isNonEmptyString(uniIdToken)) return errorResult(401, '缺少有效的uniIdToken');
|
||||
try {
|
||||
const checkTokenRes = await uniIDIns.checkToken(uniIdToken);
|
||||
if (!checkTokenRes || checkTokenRes.errCode !== 0) {
|
||||
return errorResult(401, checkTokenRes && (checkTokenRes.message || checkTokenRes.errMsg) || '登录状态无效');
|
||||
}
|
||||
const permissions = Array.isArray(checkTokenRes.permission) ? checkTokenRes.permission : [];
|
||||
const roles = Array.isArray(checkTokenRes.role) ? checkTokenRes.role : [];
|
||||
if (permissions.includes(permission) || roles.includes('admin')) return true;
|
||||
return errorResult(403, '权限不足');
|
||||
} catch (e) {
|
||||
console.error('[checkPermission]', e);
|
||||
return errorResult(401, '登录状态校验失败');
|
||||
}
|
||||
}
|
||||
|
||||
function validateId(value, fieldName) {
|
||||
if (!isNonEmptyString(value) && !(typeof value === 'number' && Number.isFinite(value))) {
|
||||
return errorResult(400, `${fieldName}不能为空`);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
exports.main = async (event, context) => {
|
||||
const parsed = parseRequest(event);
|
||||
if (parsed.error) return parsed.error;
|
||||
|
||||
const request = parsed.data;
|
||||
const params = getParams(request);
|
||||
const action = request.action || params.action;
|
||||
if (!isNonEmptyString(action)) return errorResult(400, '缺少有效的action');
|
||||
|
||||
try {
|
||||
const db = uniCloud.database();
|
||||
const uniIDIns = uniID.createInstance({ context: context || {} });
|
||||
|
||||
switch (action) {
|
||||
case 'checkVersion':
|
||||
return await checkVersion({ ...request, ...params }, context || {});
|
||||
|
||||
case 'deleteFile': {
|
||||
const permission = await checkPermission(uniIDIns, request.uniIdToken, 'DELETE_OPENDB_APP_VERSIONS');
|
||||
if (permission !== true) return permission;
|
||||
if (!Array.isArray(params.fileList) || params.fileList.length === 0 ||
|
||||
params.fileList.some(file => !isNonEmptyString(file))) {
|
||||
return errorResult(400, 'fileList必须是非空文件路径数组');
|
||||
}
|
||||
const result = await uniCloud.deleteFile({ fileList: params.fileList });
|
||||
return { ...success, ...(result || {}) };
|
||||
}
|
||||
|
||||
case 'setNewAppData': {
|
||||
const permission = await checkPermission(uniIDIns, request.uniIdToken, 'UPDATE_OPENDB_APP_LIST');
|
||||
if (permission !== true) return permission;
|
||||
const idError = validateId(params.id, 'id');
|
||||
if (idError) return idError;
|
||||
if (!isObject(params.value)) return errorResult(400, 'value必须是对象');
|
||||
const value = { ...params.value, create_date: Date.now() };
|
||||
const result = await db.collection(appListDBName).doc(String(params.id)).set(value);
|
||||
return { ...success, ...(result || {}) };
|
||||
}
|
||||
|
||||
case 'getAppInfo': {
|
||||
if (!isNonEmptyString(params.appid)) return errorResult(400, 'appid不能为空');
|
||||
const result = await db.collection(appListDBName).where({
|
||||
appid: params.appid.trim()
|
||||
}).get();
|
||||
if (result && Array.isArray(result.data) && result.data.length > 0) {
|
||||
return { ...success, ...result.data[0] };
|
||||
}
|
||||
return errorResult(404, '应用信息不存在');
|
||||
}
|
||||
|
||||
case 'getAppVersionInfo': {
|
||||
if (!isNonEmptyString(params.appid) || !isNonEmptyString(params.platform)) {
|
||||
return errorResult(400, 'appid和platform不能为空');
|
||||
}
|
||||
const result = await db.collection(appVersionDBName).where({
|
||||
appid: params.appid.trim(),
|
||||
platform: params.platform,
|
||||
type: 'native_app',
|
||||
stable_publish: true
|
||||
}).orderBy('create_date', 'desc').get();
|
||||
if (result && Array.isArray(result.data) && result.data.length > 0) {
|
||||
return { ...result.data[0], ...success };
|
||||
}
|
||||
return errorResult(404, '应用版本信息不存在');
|
||||
}
|
||||
|
||||
default:
|
||||
return errorResult(400, `不支持的action:${action}`);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[uni-upgrade-center]', e);
|
||||
return errorResult(500, '请求处理失败');
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user