stateful-web-app/index.js (67 lines of code) (raw):

const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: true })); const session = require('express-session'); const redis = require('redis'); let RedisStore = require('connect-redis')(session); const redisClient = require('redis').createClient( process.env.REDIS_PORT, process.env.REDIS_HOST ); app.use(session({ store: new RedisStore({ client: redisClient }), secret: 'Q3J9ySAXCV', resave: false, saveUninitialized: true })) const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.get('/', async (req, res) => { console.log('get handler') console.log(' req.session.cart', req.session.cart); let html = '<html><body>Shopping cart:' + '<p>'; if (req.session.cart) { for (const item of req.session.cart) { html += item + '<br>'; } } else { html += '[Empty cart]'; } html += '</p>' + '<form action="/" method="post">' + '<input type="submit" name="command" value="Add a random fruit"/> ' + '<input type="submit" name="command" value="Clear cart"/>' + '</form>' + '</body></html>'; res.send(html); }) app.post('/', async (req, res) => { console.log('post handler') console.log(' req.body', req.body); if (req.body.command == 'Add a random fruit') { if (!req.session.cart) { req.session.cart = []; } req.session.cart.push(getRandomFruit()); } if (req.body.command == 'Clear cart') { req.session.cart = ''; } console.log(' req.session.cart', req.session.cart); res.redirect('/'); }) function getRandomFruit() { fruits = [ 'Apple', 'Banana', 'Cherries', 'Date Fruit', 'Elderberries', 'Figs', 'Gooseberries', 'Honeydew Melon', 'Jackfruit', 'Kiwifruit', 'Lemon', 'Mango', 'Nectarine', 'Orange', 'Papaya', 'Quince', 'Raspberries', 'Strawberries', 'Tangerine', 'Watermelon' ]; return fruits[Math.floor(Math.random()*fruits.length)]; }