本文目录

nodejs express node-postgre 做分页接口

🌙
手机阅读
本文目录结构

postgresql的封装方法参见 PG封装

需要做一个分页的接口供前端使用,代码如下

  1. //获取账号的交易列表
  2. var express = require("express");
  3. var router = express.Router();
  4. var pgclient = require('../database/PG');// 引用上述文件
  5. pgclient.getConnection();
  6. //写日志
  7. let log4js = require('../database/log_config');
  8. let logger = log4js.getLogger('read_database');//此处使用category的值
  9. let responseData = null;
  10. router.use(function (req, res, next) {
  11. responseData = {
  12. code: 200,
  13. success: true,
  14. message: "success"
  15. }
  16. next();
  17. })
  18. router.get("/get_account_list", function (req, res, next) {
  19. var queryAccount = req.query.account;// ?account=2
  20. var queryPage = req.query.page;// ?page=2
  21. var page, //当前页数
  22. pages, // 合计总页数
  23. count; //总条数
  24. var OFFSETVAL;//前面忽略的条数
  25. var LIMITVAL = 20;//每页显示条数
  26. if (typeof Number(queryPage) !== "number") {
  27. page = 1;
  28. } else {
  29. page = Number(queryPage) || 1;
  30. }
  31. //TODO 筛选To里 不是失败的
  32. // is_stable === true and is_fork === false and is_invalid === false and is_fail === false
  33. pgclient.query('Select COUNT(1) FROM transaction WHERE "from" = $1 OR "to"=$1', [queryAccount], (count) => {
  34. let typeCountVal = Object.prototype.toString.call(count);
  35. if (typeCountVal === '[object Error]') {
  36. responseData = {
  37. count: 0,
  38. tx_list: [],
  39. code: 500,
  40. success: false,
  41. message: "count account Error"
  42. }
  43. res.json(responseData);
  44. } else {
  45. count = Number(count[0].count);
  46. if (count === 0) {
  47. responseData = {
  48. count: 0,
  49. tx_list: [],
  50. code: 404,
  51. success: false,
  52. message: "account no found"
  53. }
  54. res.json(responseData);
  55. } else {
  56. pages = Math.ceil(count / LIMITVAL);
  57. //paga 不大于 pages
  58. page = Math.min(pages, page);
  59. //page 不小于 1
  60. page = Math.max(page, 1);
  61. OFFSETVAL = (page - 1) * LIMITVAL;
  62. // *,balance/sum(balance)
  63. pgclient.query('Select exec_timestamp,level,hash,"from","to",is_stable,is_fork,is_invalid,is_fail,amount,mci FROM transaction WHERE "from" = $1 OR "to"=$1 order by exec_timestamp desc, level desc,pkid desc LIMIT $2 OFFSET $3', [queryAccount, LIMITVAL, OFFSETVAL], (data) => {
  64. let typeVal = Object.prototype.toString.call(data);
  65. if (typeVal === '[object Error]') {
  66. responseData = {
  67. tx_list: [],
  68. page: 1,
  69. count: 0,
  70. code: 500,
  71. success: false,
  72. message: "Select exec_timestamp,level,hash,from,to,is_stable,is_fork,is_invalid,is_fail,amount,mci FROM transaction Error"
  73. }
  74. res.json(responseData);
  75. } else {
  76. responseData = {
  77. tx_list: data,
  78. page: Number(queryPage),
  79. count: Number(count),
  80. code: 0,
  81. success: true,
  82. message: "success"
  83. }
  84. //是否从此帐号发出
  85. responseData.tx_list.forEach(item => {
  86. if (item.from == queryAccount) {
  87. item.is_from_this_account = true;
  88. } else {
  89. item.is_from_this_account = false;
  90. }
  91. //是否转给自己
  92. if (item.from == item.to) {
  93. item.is_to_self = true;
  94. } else {
  95. item.is_to_self = false;
  96. }
  97. })
  98. res.json(responseData);
  99. }
  100. });
  101. }
  102. }
  103. });
  104. })

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了