Как получить несколько результатов запроса в одной и той же функции обработчика запросов с помощью hapi js - PullRequest
0 голосов
/ 16 марта 2020

У меня есть хапи js метод обработчика маршрута сервера, и он имеет запрос knex js select с ограничением набора результатов до 10 на страницу. но в том же ответе нужно получить счетчик TotalPages тоже. Я включил отдельную функцию, чтобы получить общее количество сообщений. но значение totalPages не отображается в результате json. Могу ли я узнать, как получить общее количество запросов в переменную totalPages перед выполнением метода getOperation и включить это значение в раздел ответа getOperation.

server.route({
    path: options.basePath + '/posts/byCategory/{category}/list/page/{page}',
    method: 'GET',
    handler: async  (request, reply) => {
        const page= request.params.page;
        const category = request.params.category;
        var soffset=(page-1)+"0";
        var offset=Number(soffset);

        var totalPages;

        totalPages = await server.app.knex('posts').where({
            category_english_name: category
        }).select().then((results) => {
            results.length;
        });   

        const getOperation = server.app.knex('posts').where({
            category_english_name: category
        }).select().limit(10).offset(offset).then((results) => {
            //totalPages=Math.ceil(results.length/10);

            if (!results || results.length === 0) {
                reply({
                    error: true,
                    errMessage: 'No result found',
                });
            }
            reply({
                page:page,
                dataCount: results.length,
                offset:offset,
                total_pages: totalPages,
                results: results,
            });
        }).catch((err) => {
            reply('server-side error');
            console.log(err);
        });
    }
});```

1 Ответ

0 голосов
/ 17 марта 2020

Я нашел ответ на этот вопрос.

нам нужно создать функцию, возвращающую результат первого запроса. тогда нам нужно вызвать эту функцию, и возвращаемое значение должно быть присвоено переменной const в функции handle. затем мы можем добавить первый результат запроса в наш ответ.

функция с параметром для выполнения первого запроса

function getAllPageCount(category) {
    return server.app.knex('posts').where({
        category_english_name: category
    }).select().then((results) => {

           return results.length;
        });

};

Затем вызвать эту функцию перед вторым запросом в обработчике

server.route({
    path: options.basePath + '/posts/byCategory/{category}/list/page/{page}',
    method: 'GET',

    handler: async  (request, reply) => {
        const page= request.params.page;
        const category = request.params.category;
        var soffset=(page-1)+"0";
        var offset=Number(soffset);
        var tot;

        const pageCount = await getAllPageCount(category).catch((err) => { throw err }) 

        console.log("pageCount "+pageCount);

        const getOperation = server.app.knex('posts').where({
            category_english_name: category
        }).select().limit(10).offset(offset).then((results) => {
            //totalPages=Math.ceil(results.length/10);

            if (!results || results.length === 0) {
                reply({
                    error: true,
                    errMessage: 'No result found',
                });
            }
            reply({
                page:page,
                dataCount: results.length,
                offset:offset,
                total_pages: pageCount,
                results: results,
            });
        }).catch((err) => {
            reply('server-side error');
            console.log(err);
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...