Задать вопрос
@ds3

Как обновить кэш при редактировании данных?

Для кеширования я использую эту библиотеку cache-all . И столкнулся с такой проблемой, что при редактировании данных старые данные, которые хранятся в кэше, не обновляют изменения, пока не истечет время хранения кэша. Как сделать кэширование при изменении данных?

Я устанавливаю загрузку кэширования в index.js:

const cache = require('cache-all')

cache.init({
  expireIn: 86400
})


routing:

const express = require("express");
const router = express.Router();
const controller = require("../controllers/users");
const cache = require('cache-all')

router.get("/get_all", cache.middleware(86400), controller.getAll);
router.patch("/patch/:USER_ID", controller.update);

module.exports = router;


А теперь, что нужно сделать, чтобы кэш обновлялся при каждом изменении данных? Вот мой не рабочий вариант:

const cache = require('cache-all')

module.exports.update = async function (req, res) {
    try {
        let users = await User.findOne({ USER_ID: req.params.USER_ID });
        await users.set({
            LOGIN: req.body.LOGIN
        })
        users.save().then(function () {
            return cache.set('patch:' + req.params.USER_ID, users);
        }).then(() => {
            return res.status(200).json(users);
        })
    } catch (e) {
        errorHandler(res, e);
    }
};


Или вы можете посоветовать более удобную и простую в использовании библиотеку для кэширования?
  • Вопрос задан
  • 486 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
MvcBox
@MvcBox
Software Engineer [C/C++/JS(for Node.js)/etc]
Вы в исходники вообще не смотрите?

1) Полный сброс - https://github.com/bahung1221/cache-all/blob/maste...
2) Сброс по ключу - https://github.com/bahung1221/cache-all/blob/maste...
3) Формирование ключа - https://github.com/bahung1221/cache-all/blob/maste...

P. S.
Это что за ужас?
let users = await User.findOne({ USER_ID: req.params.USER_ID });
        await users.set({
            LOGIN: req.body.LOGIN
        })
        users.save().then(function () {
            return cache.set('patch:' + req.params.USER_ID, users);
        }).then(() => {
            return res.status(200).json(users);
        })

Такое ощущение, что Вы где-то взяли код с примером использования async/await и долепили к нему свой чейн из промисов.
Ну и в догонку - у вас в этом коде баг. Присмотритесь внимательно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы