const {toNumber} = require("./typeTool_cjs"); const {handle} = require("./handle_cjs"); const codeMap = require("../map/rcodeMap"); function limitSql (limit = 20,page = 1){ let sql = ''; let values = []; limit = toNumber(limit); page = toNumber(page); limit = limit || 20; page = page || 1; sql += ` limit ?,?`; values.push(limit * (page - 1),limit) return {sql,values} } /** * 封装搜索数据库字段 * @param errorText * @param dbFn * @param _params * @param _sort * @param page * @param limit * @param listChangeHandle * @returns {Promise<[err,{arr, total: number, limit, page}]>} */ async function searchHandle(errorText,dbFn,_params,_sort,page,limit , listChangeHandle = null ){ let err,response,arrPromise,countPromise; limit = toNumber(limit); page = toNumber(page); limit = limit||20; page = page||1; arrPromise = dbFn('array', _params, _sort, page, limit); if(page <= 1){ // 添加计数字段 countPromise = dbFn('count',_params); [err,response] = await handle(Promise.all([arrPromise,countPromise])) }else{ [err,response] = await handle(Promise.all([arrPromise])) } if(err){ return [ {eCode:codeMap.ServerError,eMsg:`${errorText}`,eDetail:err.message}, null ] } let arr = response[0]; if(listChangeHandle){ arr = arr.map(listChangeHandle) } let result = { arr: arr, limit: limit, page: page, total: 0 } if(page <= 1){ result.total = response[1]?response[1][0].total:null } return [null,result]; } function searchSql (fn,type,sql,values,limit,page){ // 添加分页 if(type==='array'){ let _limitSql = limitSql(limit,page); sql += _limitSql.sql; values.push(..._limitSql.values); } return fn(sql,values) } /** * 参数转化为防止sql注入的字符串 * @param str * @returns {string|*} */ function toSqlString (str){ if(!str){ return ''; } return str.replace(/'/g,"\\'") } module.exports = { limitSql, searchHandle, searchSql, toSqlString }