searchSql.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. const {toNumber} = require("./typeTool_cjs");
  2. const {handle} = require("./handle_cjs");
  3. const codeMap = require("../map/rcodeMap");
  4. function limitSql (limit = 20,page = 1){
  5. let sql = '';
  6. let values = [];
  7. limit = toNumber(limit);
  8. page = toNumber(page);
  9. limit = limit || 20;
  10. page = page || 1;
  11. sql += ` limit ?,?`;
  12. values.push(limit * (page - 1),limit)
  13. return {sql,values}
  14. }
  15. /**
  16. * 封装搜索数据库字段
  17. * @param errorText
  18. * @param dbFn
  19. * @param _params
  20. * @param page
  21. * @param limit
  22. * @param listChangeHandle [function] map中的每一项的处理函数
  23. * @returns {Promise<[err,{arr, total: number, limit, page}]>}
  24. */
  25. async function searchHandle(errorText,dbFn,_params,page,limit ,
  26. listChangeHandle = null
  27. ){
  28. let err,response,arrPromise,countPromise;
  29. limit = toNumber(limit);
  30. page = toNumber(page);
  31. limit = limit||20;
  32. page = page||1;
  33. arrPromise = dbFn('array',_params,page,limit);
  34. if(page <= 1){
  35. // 添加计数字段
  36. countPromise = dbFn('count',_params);
  37. [err,response] = await handle(Promise.all([arrPromise,countPromise]))
  38. }else{
  39. [err,response] = await handle(Promise.all([arrPromise]))
  40. }
  41. if(err){
  42. return [
  43. {eCode:codeMap.ServerError,eMsg:`${errorText}`,eDetail:err.message},
  44. null
  45. ]
  46. }
  47. let arr = response[0];
  48. if(listChangeHandle){
  49. arr = arr.map(listChangeHandle)
  50. }
  51. let result = {
  52. arr: arr,
  53. limit: limit,
  54. page: page,
  55. total: 0
  56. }
  57. if(page <= 1){
  58. result.total = response[1]?response[1][0].total:null
  59. }
  60. return [null,result];
  61. }
  62. function searchSql (fn,type,sql,values,limit,page){
  63. // 添加分页
  64. if(type==='array'){
  65. let _limitSql = limitSql(limit,page);
  66. sql += _limitSql.sql;
  67. values.push(..._limitSql.values);
  68. }
  69. return fn(sql,values)
  70. }
  71. /**
  72. * 参数转化为防止sql注入的字符串
  73. * @param str
  74. * @returns {string|*}
  75. */
  76. function toSqlString (str){
  77. if(!str){
  78. return '';
  79. }
  80. return str.replace(/'/g,"\\'")
  81. }
  82. module.exports = {
  83. limitSql,
  84. searchHandle,
  85. searchSql,
  86. toSqlString
  87. }