読者です 読者をやめる 読者になる 読者になる

node.js + express でログイン状態を判断して、表示する文字を変える

共通ヘッダーなどでログイン状態で表示文字をかえたいときなどに便利です。
方法はdynamicHelpersというメソッドを使います。
※ほかに方法があれば教えてください!

これは、viewをrenderする際に動的な情報を埋め込む事ができます。
共通のテンプレートにrequest情報を渡すときに便利です。

以下例ではログインしていたら、true、を返すメソッドを作成してテンプレート側でそのメソッドを使用して、ログインしている場合とログインしていない場合で表示を切り替えています。

以下では req.session.user にログインした際に、user情報を保持しているものとします。
vi app.js
-----
  :
  :
app.dynamicHelpers({
  // check login state
  is_logined: function(req, res){
    return req.session.user ? true : false;
  }   
});
  :
  :
-----

headerを呼び出すレイアウトejs
vi layout.ejs
-----
    :
    :
    <div id="header"><%- partial('header') %></div>
    <div id="body"><%- body %></div>
    <div id="footer"><%- partial('footer') %></div>
    :
    :
-----

dynamicHelpersのメソッドを使用しているejs
vi header.ejs
-----
<% if (is_logined) { %>                                                  
<a href="/auth/logout">Logout</a>                                        
<% } else { %>                                                           
<a href="/auth/login">Login</a>                                          
<% } %>  
-----

以下のようにrequest情報をわたせなくもないですが

res.render('index', {
   locals: { 
       req: req
   }   
});

headerのような場所で参照する変数は、renderする箇所で全部かかなければいけないのでdynamicHelpersの方が便利だと思われます。

というか書いててきずいたんですが、requestそのまま渡せばrequest情報つかってテンプレート側でなんでもできるな(汗
このあたりは設計指針というとこでしょうか。何かと便利なのでrequestわたせるようにしとこう。

vi app.js
-----
  :
  :
app.dynamicHelpers({
  // check login state
  req: function(req, res){
    return req;
  }   
});
  :
  :
-----

vi header.ejs
-----
<% if (req.session.user) { %>                                                  
<a href="/auth/logout">Logout</a>                                        
<% } else { %>                                                           
<a href="/auth/login">Login</a>                                          
<% } %>  
-----