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


80

私は現在、新しいプロジェクトで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

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


1
今(2014年)までに、このエラーは発生しなくなったようです。はるかに使いやすい。
gfaceless 2014

回答:


105

これは機能するはずです:

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

--if

2
申し訳ありませんが、PHPとJavascriptで混乱しました。私の答えを更新しました。
チェタン2011

7
タンクがたくさん!このコードは機能します:
-if

93

未定義の値の代わりに偽の値をテストしてもかまわない場合は、@ Chetanの方法よりも簡単です。

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

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


これにより、コンパイラエラーが発生します: 'builtin_function_or_method'オブジェクトに属性 'username'がありません
zakdances 2013

@ yourfriendzak-エラーの原因がテンプレートのこの部分であると確信していますか?
BMiner 2013

1
完璧に動作し、インラインJavaScriptを使用するよりも優れています。
セルギラモン2013

これは、ジェイドが空白に敏感な言語であることを示しているので、私はこの答えが好きです。
Victor.Palyvoda 2014

変数はで、コントローラで定義された場合にのみ動作します慎重にrender段階:res.render('view', {username: user.name});
オーギュRiedinger

10
if 'username' in this
    p=username

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


6

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

app.helpers({ username: false });

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


2
おかげで、エクスプレス3.xのapp.locals({ username: false });
参考までに

6
いいアプローチ。Express 4.xではapp.locals関数ではなくなったため、次のようになっていることに注意してくださいapp.locals.username = false;
Tom


0

isDefined私の見解のどこでもメソッドを利用できるようにするミドルウェアを作成しました:

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.