A very small example
let value = null;
const getValues = () => {
fetch('/third-party-api')
.then(res => res.json())
.then(data => {
value = data;
})
}
getValues();
app.get("/values", async (req, res) => {
res.json(value);
});
When it is getting deployed, it will work. But after x-amount of time (sometimes hours, sometimes it will work the whole day), the value will get back to being null. I am paying for Heroku, so the server will never sleep, and this is why it doesn't make sense to me why this happens.
Can I somehow prevent this, so the value won't get back to being null?
Why I'm doing this:
The third-party API is huge and takes around 30 sec to fetch. So I simply create this tiny API to add pagination and only call the third party on build
You can simply use middleware in your route if you use this method specifically in this route. You can do something like this:
let value = null;
const getValues = async (req, res, next) => {
if (!value) {
next();
}
try {
const res = await fetch('/third-party-api');
const resJson = JSON.parse(res);
value = resJson;
next();
} catch (e) {
res.send({error: e});
}
}
// getValues(); remove this call
app.get("/values", getValues ,async (req, res) => {
res.json(value);
});