本文目录

nodejs express node-postgre 做分页接口

🌙
手机阅读
本文目录结构

postgresql的封装方法参见 PG封装

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

//获取账号的交易列表
var express = require("express");
var router = express.Router();

var pgclient = require('../database/PG');// 引用上述文件
pgclient.getConnection();

//写日志
let log4js = require('../database/log_config');
let logger = log4js.getLogger('read_database');//此处使用category的值

let responseData = null;
router.use(function (req, res, next) {
    responseData = {
        code: 200,
        success: true,
        message: "success"
    }
    next();
})

router.get("/get_account_list", function (req, res, next) {
    var queryAccount = req.query.account;// ?account=2
    var queryPage = req.query.page;// ?page=2
    var page, //当前页数
        pages, // 合计总页数
        count; //总条数

    var OFFSETVAL;//前面忽略的条数
    var LIMITVAL = 20;//每页显示条数
    if (typeof Number(queryPage) !== "number") {
        page = 1;
    } else {
        page = Number(queryPage) || 1;
    }
    //TODO 筛选To里 不是失败的
    // is_stable === true  and  is_fork === false and is_invalid === false and is_fail === false
    pgclient.query('Select COUNT(1) FROM transaction WHERE "from" = $1 OR "to"=$1', [queryAccount], (count) => {
        let typeCountVal = Object.prototype.toString.call(count);
        if (typeCountVal === '[object Error]') {
            responseData = {
                count: 0,
                tx_list: [],
                code: 500,
                success: false,
                message: "count account Error"
            }
            res.json(responseData);
        } else {
            count = Number(count[0].count);
            if (count === 0) {
                responseData = {
                    count: 0,
                    tx_list: [],
                    code: 404,
                    success: false,
                    message: "account no found"
                }
                res.json(responseData);
            } else {
                pages = Math.ceil(count / LIMITVAL);
                //paga 不大于 pages
                page = Math.min(pages, page);
                //page 不小于 1
                page = Math.max(page, 1);
                OFFSETVAL = (page - 1) * LIMITVAL;
                // *,balance/sum(balance)
                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) => {
                    let typeVal = Object.prototype.toString.call(data);
                    if (typeVal === '[object Error]') {
                        responseData = {
                            tx_list: [],
                            page: 1,
                            count: 0,
                            code: 500,
                            success: false,
                            message: "Select exec_timestamp,level,hash,from,to,is_stable,is_fork,is_invalid,is_fail,amount,mci FROM transaction Error"
                        }
                        res.json(responseData);
                    } else {
                        responseData = {
                            tx_list: data,
                            page: Number(queryPage),
                            count: Number(count),
                            code: 0,
                            success: true,
                            message: "success"
                        }
                        //是否从此帐号发出
                        responseData.tx_list.forEach(item => {
                            if (item.from == queryAccount) {
                                item.is_from_this_account = true;
                            } else {
                                item.is_from_this_account = false;
                            }
                            //是否转给自己
                            if (item.from == item.to) {
                                item.is_to_self = true;
                            } else {
                                item.is_to_self = false;
                            }
                        })
                        res.json(responseData);
                    }
                });
            }
        }
    });
})

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

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

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

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

关注我: Github / 知乎

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

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

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

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

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