节点js护照js用户名字段错误和密码字段错误在表单提交时不显示

我正在尝试创build一个注册页面,所有function都正常工作。 但是,如果用户名字段和密码字段提交为空,则页面redirect到同一页面,但不显示错误来自哪里。 你可以请任何人帮我解决这个问题。 为什么这个发作? 我会把我创build的代码放在下面。

谢谢

passport.use('local-signup', new LocalStrategy({ usernameField : 'username', passwordField : 'password', passReqToCallback : true }, function(req, username, password, done) { process.nextTick(function() { if(req.body.first == "" || req.body.last == "" || req.body.email == ""){ return done(null, false, req.flash('signupMessage', 'Fields must be required')); } if(username == ""){ return done(null, false, req.flash('signupMessage', 'Username must be required')); } User.findOne({'email': req.body.email}, function(err, user1) { if (err) return done(err); User.findOne({'local.usernreqame': username}, function(err, user2){ if (err) return done(err); if (user1) { return done(null, false, req.flash('signupMessage', 'That email is already exist.')); } if (user2) { return done(null, false, req.flash('signupMessage', 'That username is already exist.')); } else { var newUser = new User(); newUser.local.username = username; newUser.local.password = newUser.generateHash(password); newUser.usertype = "592000f0161d63ac334358d3"; newUser.first = req.body.first; newUser.last = req.body.last; newUser.email = req.body.email; newUser.save(function(err) { if (err) throw err; return done(null, newUser); }); } }) }); }); })); 

所有我为这个应用程序创build的路线

 module.exports = function(app, passport){ app.get('/home', function(req, res){ res.render('index'); }); app.get('/sign-up', function(req, res){ res.render('signup', { message: req.flash('signupMessage') }); }); app.post('/sign-up', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/sign-up', failureFlash : true })); app.get('/profile', isLoggedIn, function(req, res) { res.render('users/profile', { user : req.user }); }); app.get('*', function(req, res){ res.render('404'); }); } function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); } 

在这里你可以看到模板文件

 <form method="post" action="/sign-up"> <input type="text" name="first" placeholder="Enter Firstname"><br/> <input type="text" name="last" placeholder="Enter Lastname" ><br/> <input type="email" name="email" placeholder="Enter E-mail" ><br/> <input type="text" name="username" placeholder="Enter username"><br/> <input type="password" name="password" placeholder="Enter Password"><br/> <input type="submit" value="Sign Up"> </form> <% if (message.length > 0) { %> <div><%=message%></div> <% } %> 

我不确定发生了什么事。 但让我们尝试一下。

我相信,你的闪光消息已被删除。

看:

这是你的代码:

 app.post('/sign-up', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/sign-up', failureFlash : true // you are passing this parameter })); 

看护照代码:

 ... if (options.failureFlash) { var flash = options.failureFlash; // flash here is 'true' if (typeof flash == 'string') { // not 'string' flash = { type: 'error', message: flash }; } flash.type = flash.type || 'error'; // 'flash.type' is undefined, 'flash' is 'true', so not is gonna happen var type = flash.type || challenge.type || 'error'; // 'type' now is 'error' msg = flash.message || challenge.message || challenge; if (typeof msg == 'string') { req.flash(type, msg); // value assigned: ['error', 'yourmessage'] } } ... 

所以,我相信,如果你的电话:

 app.get('/sign-up', function(req, res){ res.render('signup', { message: req.flash('error') }); // changing 'signupMessage' to error, it would works. }); 

或者,您可以将failureFlash参数更改为和object:

 app.post('/sign-up', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/sign-up', failureFlash : { type: 'signupMessage' } })); 

并保持不变:

 res.render('signup', { message: req.flash('signupMessage') }); 

让我知道如果它的作品。

干杯!