Как создать пагинацию на стороне сервера для SPA, используя Express и MySQL? - PullRequest
0 голосов
/ 12 апреля 2019

Я новичок в 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);
    }

});
...