0

私はexpressjsを使用しています。アプリには次のものがあります。

app.get('/profile',index.profile);
app.get('/',index.home);

そしてlayout.jadeで

...
if typeof(username)!=='undefined'
                    li: a(href='/logout') Log Out
                else
                    li: a(href='/register') Register
...

私のルーティングコードは次のとおりです。

 exports.home = function(req,res){
if (typeof req.session.username == 'undefined')
    res.render('login',{title:'PageTitle'});
else
    res.redirect('/profile');
 };

exports.profile = function(req,res){
var show_devices = function(username,dev){
    res.render('home',{title:'Pagetutle', username: username,some other data..});
}
if (typeof req.session.username == 'undefined')
    res.redirect('/');
  ...

これが私のログアウトです

 exports.logout = function(req,res){
req.session.destroy();
res.redirect('/');
 };

サーバーを初めて起動すると、リストRegisterに表示され、ログインすると gentLog Outになりますが、ログアウトすると も表示されますLog Out。あたかもusername何とかそこで生き残ったかのように。jade 名前空間から変数を削除するにはどうすればよいですかusername- それが私の問題だと思います。

4

1 に答える 1

0

私は解決策を見つけましたが、私には醜く感じます。

私はこのように変更しexports.homeます:

exports.home = function(req,res){
if (typeof req.session.username == 'undefined')
    res.render('login',{title:'Smart Fridge',username:undefined});
else
    res.redirect('/profile');
};

jade がチェックすると、ユーザー名のタイプが定義されていないことがわかります。より良い解決策はありますか?他のページからもレンダリングされるため、タイプが未定義かどうかを確認する必要がありlayout.jadeます。そのため、ページをレンダリングするたびに、メニューのどの要素を表示し、どの要素を表示しないかを定義するためだけに変数を渡すのはばかげています。

于 2013-04-07T19:15:20.083 に答える