searchSql.js 1.9 KB

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