最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - connect-flash and jade: unable to show flash messahe - Stack Overflow

programmeradmin1浏览0评论

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?

Share Improve this question asked Dec 29, 2013 at 17:46 KGoKGo 20.1k11 gold badges32 silver badges47 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

Simply 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});
}
发布评论

评论列表(0)

  1. 暂无评论