UNPKG

access-db

Version:

[统一数据库的连接]Unified access to all kinds of databases

97 lines (96 loc) 4.73 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dbRedis_1 = require("../utils/dbRedis"); const utils_1 = require("../utils/utils"); const findTrans_1 = __importDefault(require("../utils/findTrans")); const constants_1 = require("../constants/constants"); const error_1 = require("../constants/error"); function fetchFind(table, params = {}) { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { try { let func = [], fkeys = (0, dbRedis_1.reTable)(table) + ':id:key:*'; let skeys = yield dbRedis_1.redisClient.KEYS(fkeys); let result = []; if (skeys.length === 0) { return resolve({ data: { objects: result || [] } }); } let limit = (params.limit || 20); let all = limit * (params.page || 1); // 仅翻页的情况 if (!params.r && !params.orderBy) { let skeysValueList = yield dbRedis_1.redisClient.MGET(skeys); let newSkeys = (0, utils_1.stringTimeNumSort)(skeysValueList, skeys); let pskeys = []; // 每页的 if (params.limit) { pskeys = newSkeys.slice(all - limit, all); } else { pskeys = newSkeys; } let hkeys = []; for (let j = 0; j < pskeys.length; j++) { hkeys.push(pskeys[j].replace('id:key:', '')); } for (let i = 0; i < hkeys.length; i++) { func.push(dbRedis_1.redisClient.HGETALL(hkeys[i])); } result = (yield Promise.all(func)); } else { let newarr = [], t_json, newSkeys; if (!params.orderBy) { let skeysValueList = yield dbRedis_1.redisClient.MGET(skeys); newSkeys = (0, utils_1.stringTimeNumSort)(skeysValueList, skeys); for (let j = 0; j < newSkeys.length; j++) { func.push(dbRedis_1.redisClient.HGETALL(newSkeys[j].replace('id:key:', ''))); } } else { for (let j = 0; j < skeys.length; j++) { func.push(dbRedis_1.redisClient.HGETALL(skeys[j].replace('id:key:', ''))); } } newarr = (yield Promise.all(func)); if (newarr.length > 0 && params.orderBy) { if (!(0, utils_1.isArray)(params.orderBy)) throw new Error(error_1.ORDER_BY_NOT_ARRAY); let tempOrder = params.orderBy[0].substring(1); let isNum = +newarr[0][tempOrder] === NaN ? false : true; if (params.orderBy[0][0] === '-') { newarr = isNum ? (0, utils_1.RedisSortNum)(newarr, tempOrder, 0) : (0, utils_1.RedisSortStr)(newarr, tempOrder, 0); } else { newarr = isNum ? (0, utils_1.RedisSortNum)(newarr, tempOrder, 1) : (0, utils_1.RedisSortStr)(newarr, tempOrder, 1); } } let index = 0; while (result.length < all && index < newarr.length) { t_json = newarr[index]; let isOk = (0, findTrans_1.default)(params, 1, t_json, constants_1.PLATFORM_NAME.REDIS); if (isOk) { result.push(t_json); } index++; } result = result.slice(all - limit, all); } resolve({ data: { objects: result || [] } }); } catch (err) { reject(err); } })); } exports.default = fetchFind;