UPDATE:
I figured out the issue. It was really a noob mistake, I'm still laughing at myself. I put a app.get(':/id') above my app.get('/login') so it was sending more than one header.
Not sure why I'm getting this error. Whenever I try to use the 'login' route, the server crashes. I even deleted everything from the login route and put a simple res.send('test') in it's place but it still didn't work. I read that this error is caused by double callbacks, but I can't find a double callback anywhere. For some reason I get three errors too.
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:372:5)
at ServerResponse.setHeader (node:_http_outgoing:576:11)
at ServerResponse.header (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:794:10)
at ServerResponse.contentType (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:624:15)
at ServerResponse.send (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:149:14)
at done (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:1035:10)
at C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:356:7
at tryHandleCache (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:280:5)
at Object.exports.renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:491:10)
at renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:298:7)
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:372:5)
at ServerResponse.setHeader (node:_http_outgoing:576:11)
at ServerResponse.header (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:794:10)
at ServerResponse.contentType (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:624:15)
at ServerResponse.send (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:149:14)
at done (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:1035:10)
at C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:356:7
at tryHandleCache (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:280:5)
at Object.exports.renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:491:10)
at renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:298:7)
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:372:5)
at ServerResponse.header (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:794:10)
at ServerResponse.contentType (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:624:15)
at ServerResponse.send (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:149:14)
at done (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\express\lib\response.js:1035:10)
at C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:356:7
at tryHandleCache (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:280:5)
at Object.exports.renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs\lib\ejs.js:491:10)
at renderFile (C:\Users\natha\Documents\Coding\Menu Planner\node_modules\ejs-mate\lib\index.js:298:7)
This is the code I have:
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const passport = require('passport');
const passportLocal = require('passport-local');
const {isLoggedIn} = require('./middleware');
mongoose.connect('mongodb://localhost:27017/menu-planner');
const User = require('./models/user');
app.use(passport.session());
passport.use(new passportLocal(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get('/home', isLoggedIn, (req,res) => {
res.render('home', {user: req.user});
})
app.get('/login', (req,res) => {
if (req.isAuthenticated()) {
res.redirect('/home')
} else {
res.render('login');
}
})
app.listen(3000);
Here's my middleware code:
module.exports.isLoggedIn = (req,res,next) => {
if (!req.isAuthenticated()) {
return res.redirect('/login');
}
next();
}