Я получаю ошибку Cannot set headers after they are sent to the client
после I: 1. входа в систему, 2. выхода из системы и затем 3. входа в систему.
Моя путаница возникает из-за того, что: 1. Я даже не вижу, где код устанавливает заголовки в маршруте 'login'
post
, и 2. Последовательность команд в '/login'
post
Маршрут, в котором, по-видимому, возникает ошибка, такой же, как в маршруте '/signup'
post
, и последний выполняется без проблем.то есть оба имеют назначения на req.session.user
, за которыми следует res.redirect('/protected_page');
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var multer = require('multer');
var upload = multer();
var app = express();
app.set('view engine', 'pug');
app.set('views', __dirname + '/views');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.use(upload.array());
app.use(cookieParser());
app.use(session({secret: "Shh, it's a secret!"}));
app.use(express.static('public'));
var users = [];
app.get('/signup', function(req, res){
res.render('signup');
});
app.post('/signup', function(req, res){
if(!req.body.id || !req.body.password) {
res.status(400);
res.send("Invalid details!");
} else {
users.filter(function(user) {
if (user.id === req.body.id) {
res.render('signup', {
message: "User Already Exists! Login or choose another user id"});
}
});
var newUser = {id: req.body.id, password: req.body.password};
users.push(newUser);
req.session.user = newUser;
res.redirect('/protected_page');
}
});
function checkSignIn(req,res, next){
if (req.session.user) {
next();
} else {
var err = new Error("Not logged in!");
next(err);
}
}
app.get('/protected_page', checkSignIn, function(req, res){
res.render('protected_page',{id: req.session.user.id});
})
app.get('/login', function(req,res){
res.render('login');
})
app.post('/login', function(req,res){
if (!req.body.id || !req.body.password) {
res.render('login', {message: "Please enter both id and password!"});
} else {
users.filter(function(user){
if (user.id === req.body.id && user.password === req.body.password) {
req.session.user = user; //*** PROBLEM SEEMS TO BE HERE ***
res.redirect('/protected_page'); //*** OR HERE ***
}
});
res.render('login', {message: "Invalid credentials"});
}
})
app.get('/logout', function(req, res){
req.session.destroy(function(){
console.log("user logged out")
});
res.redirect('/login');
})
app.use('/protected_page', function(err,req,res,next){
console.log(err);
res.redirect('/login');
});
Я вижу, что другие задавали подобные вопросы, но ни один из этих случаев, кажется, не применим к моей ситуации, как в тех других случаях, которые яМожно увидеть, где код пытается записать в заголовок после отправки ответа, но в моем случае я не вижу, где это происходит.Заранее спасибо, если кто-то может помочь в этом!