Ho un'azione che recupera il modello utente da db per controllare l'accesso.
Allora ho un metodo che in alcuni casi richiede lo stesso modello.
function checkAccess(req, res, next) {
var data = Data.fetch(req.params._id);
if (data.userId === req.user._id) {
return res.sendStatus(401);
}
return next();
}
Router()
.get('/:_id',
checkAccess,
function (req, res, next) {
var data = Data.fetch(req.params._id);
update(data);
return res.json(data);
});
La domanda non riguarda come riutilizzare i dati esattamente in quel caso (la soluzione più semplice che ho trovato è usare res.local
).
La mia confusione riguarda il recupero degli stessi dati da db due volte, quando teoricamente può essere riutilizzato.
Non è una richiesta pesante, quindi è improbabile che il livello di cache aumenti la velocità di accesso rispetto all'accesso a db. Ma l'uso della cache può introdurre molti problemi con l'invalidazione.
Ho scoperto che l'utilizzo della cache correlata alla richiesta ( res.local
) può risolvere in particolare il problema, ma rende il mio codice più dettagliato e complesso. Controllo tutti i dati che sono stati recuperati e devo anche prendere la decisione che questi dati siano obsoleti. Inoltre, inoltro gli argomenti tramite diversi metodi per riutilizzarlo, in modo da inquinare la mia API interna (ad esempio quando invio email riutilizzare i dati necessari per il rendering del modello di email, quindi non posso usare mailService.sendInvite(userId)
, ma mailService.sendInvite(userId, {user: user, event: event})
).