I wrote a middle ware that update some variable that I have in cache, so if the data is supposed to be expired it will updated but actually is happening twice and is not chrome, I'm using firefox. This is my server js file(i commented mustache express as templates to be sure that it's not because of it):
const express = require('express') ;
const path = require('path');
var mustacheExpress = require('mustache-express');
var request = require('request');
var {updateAllDecks} = require('./utils/deck-request');
var cache = require('memory-cache');
const port = process.env.PORT || 3000;
var app = express();
// Register '.html' extension with The Mustache Express
app.engine('html', mustacheExpress());
app.set('view engine','mustache');
app.set('views', __dirname + '/views');
//const publicPath = path.join(__dirname, '/public');
//app.use('/', express.static(publicPath));
app.use(function (req, res, next) {
debugger;
updateAllDecks(next);
})
app.get('/', (req, res) => {
res.send('hola');
});
app.listen(port, () => {
console.log(`Server is up on port ${port}`);
});
So when I go to '/' through the browser updateAllDecks() should be called:
var rp = require('request-promise-native');
var cache = require('memory-cache');
var {Deck} = require('../classes/deck');
var cacheDeck = require('./cache-decks');
var moment = require('moment');
var updateDeck = async (set,resolve) => {
//console.log(`${cacheDeck.getCachedExpirationDate(set)} > ${moment(Date.now()).unix()}`);
if (cacheDeck.getCachedExpirationDate(set) > moment(Date.now()).unix()) {
//let deck = await getDeckCached(set);
console.log('Cached Deck Back');
resolve();
} else {
let url = `https://playartifact.com/cardset/${set}/`;
console.log('Getting URL');
response = await rp({url:url, json: true});
var deck = new Deck(set, response.expire_time);
getDeckRequest(deck,response,resolve)
}
}
var getDeckRequest = async (deck, body,resolve) => {
console.log('Caching deck', deck);
response = await rp({url:body.cdn_root + body.url.substring(1), json: true});
deck.setName(response.card_set.set_info.name.english);
deck.setCards(response.card_set.card_list);
cacheDeck.addDeck(deck);
console.log(cacheDeck.getCachedDecksNames());
resolve();
}
var getDeckCached = (id) => {
return new Promise((resolve,reject) => {
resolve(cacheDeck.getCachedDeckById(id));
});
}
var updateAllDecks = (callback) => {
let decks = [0,1];
var request = decks.map((deck) => {
return new Promise( (resolve) => {
updateDeck(deck,resolve);
});
});
Promise.all(request).then(() => {
callback();
console.log('Finished');
});
};
module.exports = {updateAllDecks}
The callback(); in the updateAllDecks() Function is the next() call to advance to show the page.