Документация довольно проста (если вы не пытаетесь что-то еще ... но я предполагаю /v4/search/beer
), все, что вам нужно сделать, это использовать offset
и limit
API предоставляет, что будет работать следующим образом:
offset (int, optional) - The numeric offset that you what results to start
limit (int, optional) - The number of results to return, max of 50, default is 25
Это означает, что
- , если вы хотите искать пиво от 0 до 50, установите:
offset: 0, limit: 50
- , если вы хотите искать пиво от 51 до 100, установите
offset: 50, limit: 50
- , если вы хотите искать пиво от 101 до 150, установите
offset: 100, limit: 50
Я бы изменил ваш код следующим образом:
const untappdAPI = (name, currentPage, perPage) => ({ method: 'GET',
url: 'https://api.untappd.com/v4/search/beer',
qs: {
q: name,
access_token: 'abc123',
limit: perPage, // 50
offset: currentPage * perPage // 0*50 = 0 | 1*50 = 50 | 2*50 = 100
}
})
, имея его в качестве функции, позволит вам просто передавать параметры, такие как
app.get('/untappd', function(req, res) {
const { search, currentPage, perPage } = req.query
const url = untappdAPI(search, currentPage, perPage) // (currentPage - 1) if you start with 1
try {
request(url, (error, response, body) => {
if (error) throw new Error(error)
const apiRes = JSON.parse(body).response
const beers = apiRes.beers.items
const total = apiRes.found // outputs in the API, first item in the response
res.render('untappd.ejs', {
utBeerList: beers,
perPage: perPage,
pageCount: Math.ceil(total / perPage),
currentPage: currentPage,
})
})
} catch (err) {
console.log("Something went wrong", err.message)
}
});
Единственное, что остается сделать , это обновить HTML, как вы можете видеть из звонка, нам нужно 3 параметра (вы можете сделать некоторые c и не давать пользователю возможность изменять, например, элементы на странице, и всегда отображать 50 за раз ...
<a href="?page=<%= pageCount %>¤tPage=<%= currentPage %>&perPage=50">»</a>
Примечание
в вашем коде, вы выводите const pageCount = Math.ceil(totalBeerList / perPage);
, но ответ API g ives вам общее количество элементов, которые могут быть получены в первом элементе в ответе документации как переменная found
PS Я запросил доступ к API, чтобы проверить, все это работает, скоро обновлю ответ у меня есть идентификатор клиента и секрет