Как обрабатывать нумерацию страниц с помощью Backbone.PageableCollection и пользовательского экспресс-маршрута

Я пишу приложение, которое использует базу данных под названием LeanCloud. Я создал страницу, на которой я могу просматривать всех пользователей в базе данных, но LeanCloud настроен на отправку только 100 частей данных за запрос.

В настоящее время в базе данных находится 853 пользователя, и я мог бы изменить настройку так, чтобы отправлять 1000 частей данных на запрос, но я чувствую, что это значительно замедлит работу приложения, и весьма вероятно, что число пользователей превысит 1000 в течение слишком долгого времени.,

Вот мой экспресс маршрут получения:

router.get('/', function(req, res, next) {
    var query = new AV.Query(usersObject);
    var pageNumber = req.query.page
    var perPage = req.query.per_page
    query.limit(perPage)
    query.skip((perPage * pageNumber) - perPage)
    query.count(usersObject).then((userCount) => {
        query.find().then(function(userData) {
            res.json({
                userInfo: userData,
                pageInfo: {
                    userCount: userCount,
                    pageCount: Math.ceil(userCount / perPage),
                    currentPage: pageNumber
                }
            });
        });
    });
});

Очевидно, что ответ содержит userInfo а также pageInfo, который я могу посмотреть на /api/users?page=1&per_page=30, Почему строка запроса? Это подводит меня к следующей части вопроса.

Я использую коллекцию Backbone, и после некоторых исследований я обнаружил, что backbone.paginator - это замена замены коллекции Backbone, которая выполняет нумерацию страниц. Это то, что строит строку запроса.

export var UserCollection = Backbone.PageableCollection.extend({
    model: UserModel,
    url: '/api/users',
    parse: function(response) {
        return response.userInfo
    },
    state: {
        firstPage: 1,
        pageSize: 30,
        totalPages: null,
        totalRecords: null

    },
})

На этой странице есть таблица, которая показывает state а также queryParams и говорит, что они могут быть установлены для адаптации к API сервера, который я не полностью понимаю.

Что я должен пытаться сделать здесь? Есть ли способ, которым я могу установить значения из моего ответа сервера в качестве значений на queryParams или состояние из backbone.paginator?

1 ответ

и говорит, что они могут быть установлены для адаптации к API сервера, который я не полностью понимаю. Что я должен пытаться сделать здесь?

Это для пользователей, которые интегрируются в существующий API. API в вашем случае - это экспресс-маршрут, который вы разрабатываете, поэтому вам не нужно выполнять сопоставление параметров запроса.

Допустим, вы должны использовать сторонний API, который понимает firstPage как startingIndexВ этом случае вам нужно сделать:

queryParams: {
 firstPage: 'startingIndex'
}

Есть ли способ, которым я могу установить значения из моего ответа сервера в качестве значений на queryParams или состояние

Как уже упоминалось при получении данных и управлении состояниями, отправка ответа со структурой

[{ pagination state }, [{}, {} ...]]

автоматически обновит состояние коллекции на странице. Если ответ содержит состояние в другой структуре, вы можете использовать parseState(response){ return response.state; } метод возврата объекта состояния из ответа

Другие вопросы по тегам