Как обрабатывать нумерацию страниц с помощью 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; }
метод возврата объекта состояния из ответа