2013-06-07 60 views
5

特定のテンプレートがExpressに存在するかどうかを確認する方法はありますか?基本的には、特定のフォールバックテンプレートを作成したいが、テンプレートそのものにそのロジックを含めたくない。Express、テンプレートが存在するかどうか確認してください

if(res.templateExists('specific_page')) { 
    res.render('specific_page'); 
} else { 
    res.render('generic_page'); 
} 

specific_page名は

NOTEなど、ユーザーのデバイスに基づいて実行時にgeneratead言語である:私はすでにことを、テンプレート内の文字列のローカライズを行う方法を知っている必要はありません持ってる。レイアウト/テンプレート全体が変更されるケースを探しています。

res.render('specific_page', function(err, html) { 
    if (err) { 
    if (err.message.indexOf('Failed to lookup view') !== -1) { 
     return res.render('generic_page'); 
    } 
    throw err; 
    } 
    res.send(html); 
}); 

これはテンプレートが見つからないため、スローエラーを区別します(その場合、それは代わりにgeneric_pageをレンダリングします)、およびその他のエラー、それは可能性があります:

+0

[express.jsを使用してnode.jsのレンダリングエラー/テンプレートが見つかりませんでしたか?](http://stackoverflow.com/questions/7283896/how-can-i-catch-a-)レンダリングエラーが見つからないテンプレートをノード内のjs-using-express-js) – Wtower

答えて

8

あなたはこれを使用することができます発生する(再投げられる)。スローされているエラーメッセージに依存しているため完全に安定しているわけではありませんが、エラーの種類を特定する他の方法はないと思います。

+0

これは残念ながら、テンプレートのエラーと存在しないテンプレートを区別することはできません。したがって、私は警報を出さなければならないか、テストを失敗するか、またはそうでなければ、私は不確かです。 –

+0

@ edA-qamort-ora-y私の編集を参照してください:) – robertklep

+0

'err.message'は' template not found: 'とnunjucks 3.0.0です。おそらく、それは後で「ビューを参照できませんでした」からこれに変更されました。 – trss

関連する問題