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
Post a Comment