validation邮件后,护照无法使用

我使用passport.js和mailgun-validate-email来尝试validation电子邮件,然后根据该电子邮件创build一个用户帐户。 我可以得到它来validation电子邮件,但它不会完成POST请求实际创build用户。 它最终会显示一个日志,但是它甚至不会给出我觉得奇怪的状态代码。 我正在用摩根来看这个。 通常情况下,这只是-状态码将在哪里。

Passport.use注册中间件

 passport.use('signup', new LocalStrategy({ usernameField: 'email', passReqToCallback : true }, function(req, email, password, done) { var findOrCreateUser = function(){ console.log(req.body.email); User.findOne({ email: req.body.email }, function(err, existingUser) { if(err){ console.log(err); } if (existingUser) { req.flash('form', { email: req.body.email }); return done(null, false, req.flash('error', 'An account with that email address already exists.')); } // edit this portion to accept other properties when creating a user. var user = new User({ email: req.body.email, password: req.body.password // user schema pre save task hashes this password }); user.save(function(err) { if (err) return done(err, false, req.flash('error', 'Error saving user.')); var token = new Token({ _userId: user._id, token: crypto.randomBytes(16).toString('hex') }); token.save(function (err) { if (err) return done(null, false, req.flash('error', err.message)); var email = req.body.email; // Send the email var message = 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/confirmation\/' + token.token + '\/' + email + '\n'; sendEmail('"Phantom Asset Management" noreply@phantomam.com', user.email, 'Account Verification Token', message); }); var time = 14 * 24 * 3600000; req.session.cookie.maxAge = time; //2 weeks req.session.cookie.expires = new Date(Date.now() + time); req.session.touch(); return done(null, user, req.flash('success', 'A verification email has been sent to ' + user.email + '.')); }); console.log('done'); }); }; process.nextTick(findOrCreateUser); }) ); 

然后我的控制器

 exports.postSignup = function(req, res, next){ req.assert('email', 'Please sign up with a valid email.').isEmail(); req.assert('password', 'Password must be at least 6 characters long').len(6); var errors = req.validationErrors(); if (errors) { req.flash('errors', errors); req.flash('form', { email: req.body.email }); return res.redirect('/signup'); } validator(req.body.email, function (err, result){ if(err) { return console.log('Error: ', err); } else { console.log('Result: ', result); if(result.is_valid == false){ req.flash('error', 'Looks like your email is not valid did you mean ' + result.did_you_mean + '?'); return res.redirect(req.redirect.failure); } else if(result.is_valid == true) { // calls next middleware to authenticate with passport passport.authenticate('signup', { successRedirect: '/dashboard', // Select redirect for post signup failureRedirect: '/signup', failureFlash : true }); } } }); (req, res, next); next(); }; 

如果我的理解是正确的,那么首先检查它是否是电子邮件,然后密码是正确的。 如果有错误,它可以让用户知道并redirect到/signup 。 然后它进入validation器,并给控制台一个错误或进入检查是否有效。 如果它是无效的是显示用户错误,但如果有效进入我的护照中间件。

应该采取和检查用户是否存在然后标志错误是需要的。 它保存了该用户和用于validation其电子邮件地址的令牌。 这一切都很好,期望用户和令牌的保存。

它看起来可能是一个request.js问题,我得到error: esockettimedoutmailgun-validate-email唯一的依赖只是request 2.25.0 。 这个esockettimedout是在request.js:813:19