私は最近、初めてのExpressプロジェクトで作業を始めました.Ghostのブログテーマを作成する際に以前の経験があったので、Handlebarsをテンプレート言語として使用しました。私のexpressハンドルバーテンプレートの中でif文を使用できないのはなぜですか?
Passport.jsとconnect-flashを使用してログイン画面を作成して、エラーメッセージをユーザーに送信します。ハンドルバーのヘルパーとしてエラーメッセージを渡すことができますが、ハンドルバーテンプレートの中にifステートメントを含めると、エラーメッセージが表示されても常にfalseになります。
ここに私のコードです:
login.js(ルート)
app.route('/login')
.get(function(req, res) {
if (req.isAuthenticated()) {
res.redirect('/');
} else {
res.render('login', {
helpers: {
message: req.flash('loginMessage')
}
});
}
})
.post(...);
login.handlebars
<form action="/login" method="post">
<div>
<label>Email</label>
<input type="text" name="email">
</div>
<div>
<label>Password</label>
<input type="password" name="password">
</div>
<button type="submit">Log In</button>
</form>
{{#if message}}
<p style="color: red">{{message}}</p>
{{/if}}
これはif文なしで動作します:
<p style="color: red">{{message}}</p>
しかし、私は自分のHTML全体に空の要素を持っているという考えは好きではありません。私が何か非常に単純なものを見逃していると確信しているので、どんな助けも大いに評価されるでしょう。
ありがとうございました。
括弧を追加すると、ページを開くときにTypeErrorが発生します。なぜそれが起こっているかもしれないかに関するアイデア? – getmicah
'req.flash( 'loginMessage')'は関数を返しません。それが単なる文字列であれば、私はそれがヘルパーとして意味をなさないとは思わない。なぜあなたのビューモデルデータの通常のプロパティにしないのですか? – 76484
@getmicah:私は自分の答えを編集しました。 – 76484