I'm starting to use Express now, and want to show a simple flash error message, which is just not working.
app.js
var flash = require('connect-flash');
...
var app = express(); // create an express app
// configure environments
app.configure(function(){
...
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
app.use(app.router);
});
app.get('/signup', routes.signup);
app.post('/signup', routes.adduser);
...
And my router.js
exports.signup = function(req, res) {
console.log(req.flash('error'));
res.render('signup', {message: req.flash('error')});
}
and
exports.adduser = function(req, res) {
// get the form values from "name" attribute
var username = req.body.username;
var email = req.body.useremail;
var password = req.body.userpassword;
User.findOne({'username': username}, function(err, user) {
if (user) {
console.log('user exists');
req.flash('error', 'Username exists');
res.redirect('/signup');
} else {
...
...
Now, what I want is, that if the user exists, redirect back to signup
with a flashing error/info/whatever message.
My jade template signup.jade
is
extends ../layouts/default
block content
h1 Sign Up
if message && message.length
strong #{message}
form#formAddUser(name="adduser", method="post", action="/signup")
input#inputUserName(type="text", placeholder="username", name="username")
input#inputPassword(type="password", placeholder="password", name="userpassword")
input#inputUserEmail(type="text", placeholder="email", name="useremail")
button#btnSubmit(type="submit") Sign Up
This does not display any errors. I've tried for
look as well, index access etc but nothing works. What am I doing wrong? How do I fix this?
I'm starting to use Express now, and want to show a simple flash error message, which is just not working.
app.js
var flash = require('connect-flash');
...
var app = express(); // create an express app
// configure environments
app.configure(function(){
...
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
app.use(app.router);
});
app.get('/signup', routes.signup);
app.post('/signup', routes.adduser);
...
And my router.js
exports.signup = function(req, res) {
console.log(req.flash('error'));
res.render('signup', {message: req.flash('error')});
}
and
exports.adduser = function(req, res) {
// get the form values from "name" attribute
var username = req.body.username;
var email = req.body.useremail;
var password = req.body.userpassword;
User.findOne({'username': username}, function(err, user) {
if (user) {
console.log('user exists');
req.flash('error', 'Username exists');
res.redirect('/signup');
} else {
...
...
Now, what I want is, that if the user exists, redirect back to signup
with a flashing error/info/whatever message.
My jade template signup.jade
is
extends ../layouts/default
block content
h1 Sign Up
if message && message.length
strong #{message}
form#formAddUser(name="adduser", method="post", action="/signup")
input#inputUserName(type="text", placeholder="username", name="username")
input#inputPassword(type="password", placeholder="password", name="userpassword")
input#inputUserEmail(type="text", placeholder="email", name="useremail")
button#btnSubmit(type="submit") Sign Up
This does not display any errors. I've tried for
look as well, index access etc but nothing works. What am I doing wrong? How do I fix this?
1 Answer
Reset to default 8Simply remove the line:
console.log(req.flash('error'));
req.flash(name) mean get and remove the flash. So if you call req.flash twice, the second call will return empty array.
You can also do it like so:
exports.signup = function(req, res) {
var error = req.flash('error');
console.log(error);
res.render('signup', {message: error});
}