I'm trying to save a session when I log in but, when I try to sign in I get the error TypeError: Cannot read property 'save' of undefined. I am using express-session's req.session.save({}) method when I get the error. what is wrong with my code and how do I fix this error?
adminLoginRoutes.js
const router = require('express').Router()
const {check, validationResult} = require('express-validator')
const path = require('path')
const bodyparser = require('body-parser')
const urlencodedParses = bodyparser.urlencoded({ extended: false })
const { AdminAccount } = require('../models')
const sequelize = require('sequelize')
router.use(bodyparser.json())
router.use(bodyparser.urlencoded({ extended: false }))
router.post('/', [
check('email')
.isEmail(),
check('password')
.isLength({ min: 6 })
], (req, res) => {
const errors = validationResult(req)
if(!errors.isEmpty()) {
// res.send(errors)
}
AdminAccount.findOne({
where:
{
email: req.body.email
}
}).then(dbAdminLoginData => {
if(!dbAdminLoginData) {
res.json({ message: 'No user with that email address'});
return;
}
const validPassword = dbAdminLoginData.checkPassword(req.body.password)
if (!validPassword) {
res.json({ message: 'Incorrect password!'});
return;
}
req.session.save(() => {
req.session.user_id = dbAdminLoginData.id
req.session.username = dbAdminLoginData.email
req.session.loggedIn = true;
res.json({user: dbAdminLoginData, message: 'you are now logged in'})
})
}).catch(err => console.log(err))
})
server.js
const express = require('express')
const sequelize = require('./config/connection')
const exphbs = require('express-handlebars')
const hbs = exphbs.create({})
const session = require('express-session')
const SequalizeStore = require('connect-session-sequelize')(session.Store)
const sess = {
secret: "Hello123!",
cookie: {},
resave: false,
saveUninitialized: true,
store: new SequalizeStore({
db: sequelize
})
}
const routes = require('./controllers')
// const routes = require('./routes/apiRoutes')
const app = express()
const PORT = process.env.PORT || 3001;
app.use(express.static('public'));
app.use(express.json());
app.use(routes)
app.use(express.urlencoded({ extended: true }));
app.use(session(sess))
app.engine('handlebars', hbs.engine)
app.set('view engine', 'handlebars')
sequelize.sync({ force: false }).then(() => {
app.listen(PORT, () => console.log('now listening'))
})