I have an express app. I'm using cluster package to run multi-thread. I want to set sessions (express-session) with 30s limit expiration, after a few seconds sessions destroy. But when I start app without worker, it works fine. Here is my app.js :
application.use(
session({
secret: process.env.JWT_SECRET,
resave: true,
saveUninitialized: false,
})
);
require("./routes")(application);
const port = process.env.API_PORT;
const server = http.createServer(application);
const run = () => {
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on("exit", (worker, code, signal) => {
console.error(
`worker ${worker.process.pid} died (${
signal || code
}). restarting it in a sec`
);
setTimeout(() => cluster.fork(), 1000);
});
} else {
server.listen(port, () => {
console.log(`Server is running on ${port} ...`);
});
}
};
module.exports = run;
And this is my controller :
async captchaGenerator(req, res) {
const captcha = createCaptcha(170, 45, 100, 999);
const number = captcha.number;
const image = new Buffer(captcha.image, "base64");
req.session.captcha = await bcrypt.hash(number, 10);
req.session.cookie = {
expires: new Date(Date.now() + 30 * 1000),
originalMaxAge: 30 * 1000,
};
res.writeHead(200, {
"Content-Type": "image/png",
"Content-Length": image.length,
});
res.end(image);
}