web-dev-qa-db-ja.com

Jade-テンプレートエンジン:変数が存在するかどうかを確認する方法

私は現在、新しいプロジェクトでJadeを使用しています。ページをレンダリングし、特定の変数が使用可能かどうかを確認したい。

app.js

app.get('/register', function(req, res){
    res.render('register', {
        locals: {
          title: 'Register',
          text: 'Register as a user.',
        }
      });
});

register.jade

- if (username)
p= username
- else
p No Username!

常に次のエラーが表示されます。

username is not defined

これを修正する方法についてのアイデアはありますか?

78
mbecker

これは動作するはずです:

- if (typeof(username) !== 'undefined'){
  //-do something
-}
105
Chetan

未定義の値の代わりに偽の値をテストしても構わない場合は、@ Chetanのメソッドよりも簡単です。

if locals.username
  p= username
else
  p No Username!

これは、多少皮肉な名前の locals がテンプレートのルートオブジェクトであるため機能します。

88
BMiner
if 'username' in this
    p=username

これは、res.localsがテンプレートのルートオブジェクトであるため機能します。

10
avoid3d

事前に特定の変数を使用したいが、常に使用するわけではないことがわかっている場合は、ヘルパーオブジェクトに「デフォルト」値を追加し始めました。

_app.helpers({ username: false });
_

このようにして、壊滅的な障害なしにif (username) {を実行できます。 :)

6
Dominic Barnes

「ユーザー名」をローカルオブジェクトに含めるべきではありませんか?

https://github.com/visionmedia/jade/tree/master/examples

1
TK-421

私のビューのどこでもisDefinedメソッドを使用できるようにするミドルウェアを作成しました。

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
0