質問

私はNodejsでExpressを使用しており、自分の見解を乾燥させ続けようとしています。私のレイアウトの中には、次のようなものがあります(私はジェイドを使用しています)

body
  nav.login
    -if(currentUser)
      ="logged in information"
    -else
      ="logged out information"
  !=body

問題は、私がレンダリングするたびに、私は今持っている必要があるということです

res.render('anything.jade',{
  locals: {
    currentUser: req.session.currentUser,
    /*all of my other locals*/
  }
});

すべてのレンダリングコールを通過してそれを追加し、他の地元の人々をレイアウトに追加する必要がある場合も同じことをするのは苦痛のようです。私がレンダリングするすべての場所で「currentuser」を地元の人々に再び再タイプする必要がないようにする方法はありますか

役に立ちましたか?

解決

私はこの答えが遅いことを知っていますが、後世のために:Expressを使用している場合は、付属のダイナミックヘルパーを使用する必要があります。 req,res 議論として。あなたの場合:

app.dynamicHelpers({
  user: function(req, res){
    return req.session.currentUser;
  }
});

つまり、あなたの見解は今電話することができます #{user}

他のヒント

私は次のことをすることになりました:

最初に、いくつかのローカル変数を設定します

app.use(function(req,res,next){
  req.localvars = new Object;
  next();
});

その後、いくつかのローカル変数を設定します

app.use(function(req,res,next){
  req.localvars.currentUser = req.session.currentUser;
  next();
});

レンダリング関数を設定します

function renderer(file){  
  return function(req,res,next){
    res.render(file,{locals:req.localvars});
  }
}

次に、ルーティング関数の場合

app.get('/',blah,blah,whatever,setSomeMoreLocalsHere,renderer(index.jade));

もっと良いものがあるかもしれませんが、それは私がこれまでに理解した最高の解決策です

最も簡単な解決策は、地元のオブジェクトを返す関数を使用することです。

function(req) {
    return {
        currentUser: req.session.currentUser,
        /*all of my other locals*/
    };
}

res.render('anything.jade',{
  locals: defaultLocals(req)
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top