2

Express を使い始めたばかりで、簡単なフラッシュ エラー メッセージを表示したいのですが、うまくいきません。

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);
...

と私router.js

exports.signup = function(req, res) {
    console.log(req.flash('error'));
    res.render('signup', {message: req.flash('error')});
}

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 {
            ...
            ...

今、私が欲しいのは、ユーザーが存在する場合、signup点滅するエラー/情報/その他のメッセージでリダイレクトすることです。

私の翡翠のテンプレートsignup.jade

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

これにより、エラーは表示されません。forルック、インデックスアクセスなども試しましたが、何も機能しません。私は何を間違っていますか?これを修正するにはどうすればよいですか?

4

1 に答える 1

8

次の行を削除するだけです。

console.log(req.flash('error'));

req.flash(name) は、フラッシュを取得および削除することを意味します。したがって、req.flash を 2 回呼び出すと、2 回目の呼び出しでは空の配列が返されます。

次のようにすることもできます。

exports.signup = function(req, res) {
    var error = req.flash('error');
    console.log(error);
    res.render('signup', {message: error});
}
于 2013-12-29T18:22:45.397 に答える