我的本地主机登录页面上的POST请求给出了ERR_EMPTY_RESPONSE

时间:2018-07-17 09:14:35

标签: node.js mongodb express error-handling http-post

我是node.js的新手,并尝试使用Internet上的一些帮助来构建登录系统。但是我对尝试给出ERR_NO_RESPONSE之后得到POST request的原因感到完全困惑。我正在发布代码。任何帮助将不胜感激。

注册路线运行良好,数据被保存到我设置的mlab database中。但是,当我尝试执行发布响应时,登录路由没有响应。

router.js

var express = require('express');
var router = express.Router();
var User = require('../models/user');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var utilities = require('../models/utilities');

// GET route for reading data

router.get('/', function (req, res, next) {
  res.render('index');
});


router.get('/profile', function (req, res) {
  return res.render('profile');
});


router.route('/login')
  .get(function (req, res) {
    return res.render('login');
  })
  .post(function(req, res, next) {
    passport.authenticate('login',{
      successRedirect : '/profile', // redirect to the secure profile section
  failureRedirect : '/', // redirect back to the signup page if there is an error
  failureFlash : true
}
     )});

passport.js

var LocalStrategy    = require('passport-local').Strategy;
var passport = require('passport');
var User = require('../models/user');
module.exports = function(passport){

    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    if(err) {
      console.error('There was an error accessing the records of' +
      ' user with id: ' + id);
      return console.log(err.message);
    }
    return done(null, user);
  })
});

     passport.use('login', new LocalStrategy({
        usernameField : 'logemail',
        passwordField : 'logpassword',
        passReqToCallback : true
    },
    function(req, email, password, done) {
        User.findOne({email: email}, function(err, user) {
            if(err) {
              return errHandler(err);
              }
            if(!user) {
              return done(null, false, {errMsg: 'User does not exist, please' +
              ' <a class="errMsg" href="/signup">signup</a>'});
              }
            if(!user.validPassword(password)) {
              return done(null, false, {errMsg: 'Invalid password try again'});
              }
            return done(null, user);
        });

}));

app.js

var app = express();

//used to make mLab connection    
mongoose.connect(secret.database, { useNewUrlParser: true });
var db = mongoose.connection;

//handle mongo error
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
  console.log("connected");
});

// Configure view engine to render EJS templates.
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

//use sessions for tracking logins
app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());

app.use(session({
  secret: 'work hard',
  resave: true,
  saveUninitialized: false,
  store: new MongoStore({
    mongooseConnection: db
  })
}));

// parse incoming requests
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use(passport.initialize());
app.use(passport.session());

// serve static files from template
app.use(express.static(__dirname + '/templateLogReg'));

passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    // deserialized when subsequent requests are made
passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    if(err) {
      console.error('There was an error accessing the records of' +
      ' user with id: ' + id);
      return console.log(err.message);
    }
    return done(null, user);
  })
});


require('./config/passport')(passport);

// include routes
var routes = require('./routes/router');
app.use('/', routes);

app.listen(3000, function () {
  console.log('Express app listening on port '+secret.port);
});

1 个答案:

答案 0 :(得分:0)

我看到的几件事是,我看不到您在done函数的错误中调用passport.deserializeUser回调,所以它永远无法正确关闭。

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    if(err) {
      console.error('There was an error accessing the records of' +
      ' user with id: ' + id);
      return console.log(err.message); <<----HERE
    }
    return done(null, user);
  })
});

此外,我看不到您在护照errHandler函数中的LocalStrategy函数中定义的位置?您没有在此处调用done回调函数,也返回了错误消息。

passport.use('login', new LocalStrategy({
    usernameField : 'logemail',
    passwordField : 'logpassword',
    passReqToCallback : true
},
function(req, email, password, done) {
    User.findOne({email: email}, function(err, user) {
        if(err) {
          return errHandler(err); <<==== HERE
          }
        if(!user) {
          return done(null, false, {errMsg: 'User does not exist, please' +
          ' <a class="errMsg" href="/signup">signup</a>'});
          }
        if(!user.validPassword(password)) {
          return done(null, false, {errMsg: 'Invalid password try again'});
          }
        return done(null, user);
    });