searchSql.js 2.1 KB

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