node.js - Can't send headers after they are sent -


i new nodejs. have been trying create simple login , register system using mongodb , express. have created entire app 1 error:

var express = require('express')   , passport = require('passport')   , util = require('util')   , localstrategy = require('passport-local').strategy;  var bodyparser = require('body-parser'); var cookieparser = require('cookie-parser'); var session = require('express-session'); //var flash    = require('connect-flash');  var monk = require('monk'); var db = monk('localhost:27017/loginsystem'); var collection = db.get('messagescollection');   function findbyid(id, fn) {   var collection = db.get('messagescollection');   collection.findone({ _id: id }).on('success', function (doc) {     fn(null, doc);   }); }  function findbyusername(username, fn) {   collection.findone({ username: username }).on('success', function(doc) {     return fn(null, doc);   });   return fn(null, null); }   var app = express(); app.use(bodyparser.json()); // parsing application/json app.use(bodyparser.urlencoded({ extended: true })); // parsing application/x-www-form-urlencoded  app.use(function(req,res,next){     req.db = db;     next(); });  app.use(cookieparser()); app.use(session({   secret: 'keyboard cat' hours }));  app.use(passport.initialize()); app.use(passport.session());  passport.serializeuser(function(user, done) {   console.log("user",user);   done(null, user._id); });  passport.deserializeuser(function(id, done) {   console.log(id,"id");   findbyid(id, function (err, user) {     done(err, user);   }); });  passport.use(new localstrategy(   function(username, password, done) {     findbyusername(username, function(err, user) {       if (err) { return done(err); }       if (!user) { return done(null, false, { message: 'unknown user ' + username }); }       if (user.password != password) { return done(null, false, { message: 'invalid password' }); }       return done(null, user);     })   } ));  app.use(express.static(__dirname + '/public'));  app.get('/account', ensureauthenticated, function(req, res){   res.send(req.user); });  app.get('/login', function(req, res){   res.redirect("/login.html") //redirect homepage });  app.get('/register', function(req, res) {   res.redirect("/register.html") //redirect homepage })  app.post('/login', passport.authenticate('local', { failureredirect: '/login'}), function(req, res) {   console.log("success",req.user);   res.redirect('/account'); });  app.post('/register', function(req, res) {   console.log(req.body);   // submit db   collection.insert({        "username" : req.body.username,       "email" : req.body.email,       "password" : req.body.password   }, function (err, doc) {       if (err) {           // if failed, return error           res.send("there problem adding information database.");       }       else {           //res.redirect('/account');       }   }); });  app.get('/logout', function(req, res){   req.logout();   res.redirect('/'); });  app.listen(9000);  function ensureauthenticated(req, res, next) {   console.log("req.user",req.user,req.session);   if (req.isauthenticated()) { return next(); }   res.redirect('/login'); } 

when register, user added database. , redirected /login when login error:

error: can't set headers after sent.     @ serverresponse.outgoingmessage.setheader (_http_outgoing.js:335:11)     @ serverresponse.header (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/express/lib/response.js:700:10)     @ serverresponse.res.location (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/express/lib/response.js:814:8)     @ serverresponse.redirect (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/express/lib/response.js:853:8)     @ /home/mareebsiddiqui/summerofcode/loginsystem/app.js:130:7     @ layer.handle [as handle_request] (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/express/lib/router/layer.js:82:5)     @ next (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/express/lib/router/route.js:110:13)     @ complete (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/passport/lib/middleware/authenticate.js:243:13)     @ /home/mareebsiddiqui/summerofcode/loginsystem/node_modules/passport/lib/middleware/authenticate.js:250:15     @ pass (/home/mareebsiddiqui/summerofcode/loginsystem/node_modules/passport/lib/authenticator.js:427:14) 

how resolve issue? thanks.

edit: know there many questions same title there problems different. error caused many different situations , situation different others. have problem of redirects whereas other questions have problems of ending response.

you should use return response.<method>. example, return response.redirect().

also, response.end() might helpful.


Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -