3

つまり、express+jade == クールです。質問はありません。ただし、django から来たので、django テンプレートが使用した失敗モードがありません。django では、存在しない変数をレンダリングしようとすると、それを無視して先に進みます。これは非常に煩わしい場合もありますが、ほとんどの場合はそうではありません。そのため、express を使用して jade で変数をレンダリングしようとすると、その変数が存在しない/未定義の場合、express は 500 エラーを返します。


500 TypeError: Jade:14 
12. ' // main content, post, login, etc ' 
13. ' - if (data.session.user) ' 
14. ' != partial(\'dash') ' 

Jade:3 
1. '- if (data.session.user)' 
2. ' p #{data.session.user.id}' 
3. ' p #{data.cookie.connect.sid}' Cannot read property 'connect' of undefined

ここで実験しているだけなので、印刷しようとしていることは無視してください。:)要約すると、djangoテンプレートシステムの動作のように、テンプレートのエラーを無視してレンダリングを続行するようにjade/expressに指示する簡単な方法はありますか?

4

2 に答える 2

2

javascriptの評価が失敗したときにレンダラーがエラーをスローするため、これは不可能です。

https://github.com/visionmedia/jade/blob/master/lib/jade.js#L197

プロジェクトをフォークして、呼び出しを回避するオプションを追加するrethrowか、少なくともラップすることでレンダリングをより適切に失敗させることができますres.render

app.render = function (res, options) {
  try {
    res.render(options);
  } catch(e) {
    //log(e);
  }
}
于 2011-04-06T21:47:41.800 に答える
2

Jade で変数の存在をテストできます。

  if typeof(msg) !== 'undefined'
    p #{msg}

自動ではありませんが、これは命の恩人であることがわかりました。

于 2012-01-02T17:21:11.967 に答える