如何使用Express和MySQL为SPA创建服务器端分页?

时间:2019-04-12 13:10:37

标签: javascript mysql node.js express pagination

我是Node.js的新手,我正在尝试使用Express和MySQL在服务器端创建单页分页。现在,我成功的全部是创建多页。我使用Jade作为模板引擎。我知道我可以在客户端创建它,但是考虑到我需要使用AJAX请求来执行此操作,因此我没有得到任何性能提升。

//GET DATA FROM DB WITH OFFSET!!!
Users.prototype.get_offset_data  = function(page_number, category, plans) {
    let blocksize = 12;
    let cat;
    let offset = (page_number - 1) * blocksize;
    let plan = plans ? `where json_extract(plans, '$.${plans}') = true` : '';
    if (plan === '') {
         cat = category ? `where category = ${category}`: '';
    } else {
         cat = category ? `and category = ${category}`: '';
    }
    let query = `select  *  from  test_video_category   ${plan} ${cat} limit  ?  offset  ? `;
    console.log(query);
    return new Promise((resolve, reject) => {
      this.conn.query(query,[blocksize, offset], function(err,rows){
            if(err) reject(err);
            return resolve(rows);
        });
    });
};
//GET COUNT OF ALL ELEMENTS FROM DB!!
Users.prototype.get_limited_data_page_number = function(category, plans) {
    let cat;
    let plan = plans ? `where json_extract(plans, '$.${plans}') = true` : '';
    if (plan === '') {
        cat = category ? `where category = ${category}`: '';
    } else {
        cat = category ? `and category = ${category}`: '';
    }
    let query = `select count(*) as row_count from test_video_category  ${plan} ${cat}`;
    console.log(query);
    return new Promise((resolve, reject) => {
        this.conn.query(query, function (err, data) {
            if (err) reject(err);
            return resolve(data);
        });
    });
};

//SEND DATA TO NEW PREVIEW PAGE
router.get('/new-preview-page', function (req, res, next) {
    let page_number = req.query.page_number;
    let category = req.query.category;
    let plans = req.query.plans;
    try {
        req.getConnection( async function (err, connection) {
            if (err) return next(err);
            let Users = new users(connection);
            let offset_data = await Users.get_offset_data(page_number, category, plans);
            let count_data = await Users.get_limited_data_page_number(category, plans);
            if (offset_data && count_data) res.render('marketplace', {offset_data: offset_data, count_data: count_data});
        });
    }catch (e) {
        console.log(e);
    }

});

0 个答案:

没有答案