Как настроить обновление последних записей через определенное время?
Имеется следующий node.js-код для получения последних четырех постов из instagram и последующей отдачи на фронт:
router.get('/media/latest', async (req, res) => {
await connect();
const user = await client.getUserByUsername({ username: 'username' });
const posts = user.edge_owner_to_timeline_media.edges;
const latestPosts = posts.slice(0, 4);
const latestPostsShortcodes = latestPosts.map(post => post.node.shortcode);
let foundPosts = await InstagramPost.find({ shortcode: latestPostsShortcodes }) as any;
let foundCodes = foundPosts.map(post => post.shortcode);
const codesToFetch = latestPostsShortcodes.filter(code => {
return !foundCodes.includes(code);
});
if (codesToFetch) {
let media = await getInstagramPosts(codesToFetch);
media.forEach(post => {
foundPosts.push({
text: post['edge_media_to_caption']['edges'][0]['node']['text'],
href: `https://instagram.com/p/${post['shortcode']}`,
shortcode: post['shortcode'],
img: post['display_url']
});
});
}
savePostsToDb(foundPosts);
res.send({ media: foundPosts });
});
Необходимо реализовать следующий функционал: если прошло больше суток - обновлять посты и отдавать новые посты на фронт. Я предположил, что это можно выполнить следующим путем:
- вычисляем разницу между текущим моментом времени и временем последнего запроса;
- если прошел промежуток времени в 24 часа - обновляем посты (то есть проделываем все действия до res.send())
Однако не вполне понятно - как реализовать вышеуказанный алгоритм?
Ответы (1 шт):
Судя по коду, вы используете MongoDB в качестве базы данных для хранения этих постов. В MongoDB есть ttl-индексы - https://docs.mongodb.com/manual/core/index-ttl/, сделайте такой индекс для коллекции InstagramPost с ttl величиной в сутки и напишите обертку для получения постов из инстаграм - если в БД есть посты, то отдаем их, если нет, то получаем из внешнего источника, отдаем на клиент и сохраняем в базу данных. По сути своей это элементарный алгоритм кеширования.