I'm trying to return a object with hardware sensor value every time someone hits a specific route. However, after node start/reload first requested object gets stored in memory.
As described here I tried deleting cache for that specific module. However seems to be doing really nothing in my case.
// /controllers/mqController.js
const getGas = () => {
return new Promise((resolve, reject) => {
const gas = msa.open(Number(process.env.SPI_CHANNEL), { speedHz: 20000 }, err => {
if (err) reject(err);
else
resolve(
new Promise((rslv, rjct) => {
gas.read((error, readable) => {
if (error) rjct(error);
else rslv(readable);
});
}),
);
});
});
};
exports.mqReadings = getGas()
.then(res => {
return {
lpg: mQGetGasPercentage(res.value, measureData.gasLPG),
co: mQGetGasPercentage(res.value, measureData.gasCO),
smoke: mQGetGasPercentage(res.value, measureData.gasSMOKE),
rawDbg: res.rawValue,
};
})
.catch(err => console.error(err));
{
"lpg": 2.28348626551635,
"co": 2.292945532477404,
"smoke": 2.291557122676283,
"rawDbg": 153
}
This is how it's called later, in the routes
// controllers/readingsController.js
const { mqReadings } = require('./mqController');
const AppError = require('../utils/appError');
exports.getAllReadings = async (req, res, next) => {
try {
const mq = await mqReadings;
res.status(200).json({
status: 'success',
mq,
});
next();
} catch (e) {
return new AppError(e.message, '500');
}
};
So every load/reload I get correct and expected results such as these ones:
{
"lpg": 2.28348626551635,
"co": 2.292945532477404,
"smoke": 2.291557122676283,
"rawDbg": 153
}
However, I noticed later, they never change after no matter what. Perhaps I'm missing something here, couldn't find anything specific in debugger apart from that it already showed me in one of the steps that each require gets cached.