使用 Connect-flash 和 Jade 的警报消息
Alert message with Connect-flash and Jade
我正在构建一个使用 node.js、express 和 Passport 进行登录身份验证的站点。对于注册页面,我希望网站在用户名已被使用时发送一条消息,现在以下代码工作正常,但我想添加一个 "alert" 类型的消息,略带红色背景和突出显示的文本。
signup.jade 的代码是这样的:
div(class="col-lg-12")
form(class="form" method="post" action="/SignupForm")
-if(message)
div#note #{message}
label(class="col-lg-12") username
input(type="text" name="username")
br
label(class="col-lg-12") password
input(type="password" name="password")
br
label(class="col-lg-12") email
input(type="email" name="email")
br
input(type="submit" value="Signup")
对于我的路线,我的代码是这样的(在module.exports里面)
app.get('/SignupForm', function(req,res){
res.render('SignUp', {message: req.flash('signupMessage')});
});
app.post('/SignupForm', passport.authenticate('localSignup', {
successRedirect: '/',
failureRedirect: '/SignupForm',
failureFlash: true
}));
最后,对于 Passport.js 文件,代码如下:
passport.use('localSignup', new localStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
},
function (req, username, password, done) {
process.nextTick(function () {
User.findOne({'username' : username}, function (err, user) {
if (err)
return done(err);
else if (user){
return done(null, false, req.flash('signupMessage', 'User already taken'));
} else {
var newUser = new User({username: username, password: password);
newUser.save(function (err) {
if (err) throw err;
return done (null, newUser);
});
}
});
});
})
);
顺便说一句,我已经尝试过使用 bootstrap 警报消息,如下所示:
.alert.alert-danger !{ message }
但这会立即在注册页面内显示一个突出显示的区域,即使消息尚未发送。
好吧,根据您的说法,上面的代码工作正常,除了,即使尚未发送消息也会显示。
要解决此问题,您可以将 html/jade 文件修改为:
if message
.alert.alert-danger #{message}
此代码可以让您仅在服务器发送消息时显示消息。如果消息没有发送,那么message
的值将不存在,代码也不会被执行。
希望对您有所帮助.. 如果不能通过编辑问题提供更多详细信息。
不是最好的代码,但它有效。
玉档:
-if(message == 'User already taken')
.alert.alert-danger #{message}
这样如果没有发送消息,页面内部没有高亮区域,只有当jade files收到String 'User already taken'.
时才会显示消息
我正在构建一个使用 node.js、express 和 Passport 进行登录身份验证的站点。对于注册页面,我希望网站在用户名已被使用时发送一条消息,现在以下代码工作正常,但我想添加一个 "alert" 类型的消息,略带红色背景和突出显示的文本。
signup.jade 的代码是这样的:
div(class="col-lg-12")
form(class="form" method="post" action="/SignupForm")
-if(message)
div#note #{message}
label(class="col-lg-12") username
input(type="text" name="username")
br
label(class="col-lg-12") password
input(type="password" name="password")
br
label(class="col-lg-12") email
input(type="email" name="email")
br
input(type="submit" value="Signup")
对于我的路线,我的代码是这样的(在module.exports里面)
app.get('/SignupForm', function(req,res){
res.render('SignUp', {message: req.flash('signupMessage')});
});
app.post('/SignupForm', passport.authenticate('localSignup', {
successRedirect: '/',
failureRedirect: '/SignupForm',
failureFlash: true
}));
最后,对于 Passport.js 文件,代码如下:
passport.use('localSignup', new localStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
},
function (req, username, password, done) {
process.nextTick(function () {
User.findOne({'username' : username}, function (err, user) {
if (err)
return done(err);
else if (user){
return done(null, false, req.flash('signupMessage', 'User already taken'));
} else {
var newUser = new User({username: username, password: password);
newUser.save(function (err) {
if (err) throw err;
return done (null, newUser);
});
}
});
});
})
);
顺便说一句,我已经尝试过使用 bootstrap 警报消息,如下所示:
.alert.alert-danger !{ message }
但这会立即在注册页面内显示一个突出显示的区域,即使消息尚未发送。
好吧,根据您的说法,上面的代码工作正常,除了,即使尚未发送消息也会显示。 要解决此问题,您可以将 html/jade 文件修改为:
if message
.alert.alert-danger #{message}
此代码可以让您仅在服务器发送消息时显示消息。如果消息没有发送,那么message
的值将不存在,代码也不会被执行。
希望对您有所帮助.. 如果不能通过编辑问题提供更多详细信息。
不是最好的代码,但它有效。
玉档:
-if(message == 'User already taken')
.alert.alert-danger #{message}
这样如果没有发送消息,页面内部没有高亮区域,只有当jade files收到String 'User already taken'.
时才会显示消息