2015-12-13 7 views
7

मैं अपने layout.hbs में एक नेविगेशन बार है:मार्गों का उपयोग करके नेविगेशन बार में हेरफेर कैसे करें?

<div class="collapse navbar-collapse" id="collapse">   
     <ul class="nav navbar-nav navbar-right"> 
      <li><a href={{sign}}>{{issign}}</a></li> 
      <li><a href={{los}}>{{islog}}</a></li> 
      <li><a href="/">Home</a></li> 
     </ul> 
</div> 

मैं उदाहरण के लिए, चलते-फिरते सामग्री को बदलना चाहते हैं जब में उपयोगकर्ता के प्रवेश, मैं लॉग आउट करना और भी अनुप्रेषित लॉगिन पाठ को बदलना चाहते हैं एक अलग पृष्ठ पर। मैं मार्गों के माध्यम से ऐसा कर रहा हूँ।

router.get('/', function(req, res, next) { 

    var vm = { 
     title: 'Join Fatty-cruxifinier', 
     sign: 'about', 
     issign : 'SIGNUP', 
     islog: 'LOGIN', 
     los: 'login' 
    }; 
    res.render('signup', vm); 
}); 

router.post('/', function(req, res, next) { 
    userServices.addUser(req.body, function(err){ 
    if(err){ 
    var vm = { 
     title: 'Create an account', 
     input: req.body, 
     error: err 
    }; 
    delete vm.input.password; 
    return res.render('signup', vm); 
    } 
    res.redirect('/'); 
}); 
}); 

हालांकि इस काम करने के लिए लगता है, मैं हर वेबपेज मेरे पास करने के लिए islog, issign, los और sign चर जोड़ने की जरूरत है।

क्या ऐसा करने का कोई बेहतर तरीका है?

उत्तर

0

आप सभी राउटर पकड़ सकते हैं, और प्रत्येक प्रतिक्रिया से पहले लॉग इन तर्क चला सकते हैं।

var _ = require('lodash'); 
var parameters = {}; 

function isLoggedin(req, res, next) { 
    // check is the user is logged in 
    res.user = { 
    // userdata 
    }; 
    next(); 
} 

// catch all the get routes 
app.get(/^(.*)$/, isLoggedin, function(req, res, next){ 

    if (res.user) { 
    var _parameters = { 
     title: 'Join Fatty-cruxifinier', 
     sign: 'about', 
     issign : 'SIGNUP', 
     islog: 'LOGIN', 
     los: 'login' 
    }; 
    } else { 
    var _parameters = { 
     title: 'Join Fatty-cruxifinier', 
     sign: 'about', 
     issign : 'SIGNUP', 
     islog: 'LOGIN', 
     los: 'login' 
    }; 
    } 

    parameters = _.extend(parameters, _parameters); 

    next(); 
}); 

app.get('/account', function(req, res, next){ 
    res.render('signup', parameters); 
}); 
0

मैं अपने प्रोजेक्ट में ऐसा किया, आप एक समान दृष्टिकोण का उपयोग कर सकते हैं: -

जे एस

var cookieuser = req.cookies.userId || '';  
    res.render('index', { 
     ID : cookieuser, 
     data : jsonresponse.entries 
    }); 

EJS

 <ul class="dropdown-menu"> 
      <% if(ID.length<=0) { %> 
      <li><a href="/Login">Login</a></li> 
      <% }else{ %> 
      <li><a href="/Logout">Logout</a></li> 
      <li><a href="/History">History</a></li> 
      <% } %> 

क्या करता है , यह कुकीआई के रूप में userId स्टोर करता है, जो एन ओडी हेडर एचटीएमएल को पढ़ता है और पास करता है। ईजेएस हेडर जांचता है कि आईडी खाली है या नहीं, इसका मतलब यह नहीं है कि उपयोगकर्ता लॉग इन है। मूल रूप से सशर्त रूप से ली तत्व जोड़ना।

1

आप res.locals का भी उपयोग कर सकते हैं। टेम्पलेट संकलित करते समय res.locals में कुछ भी हैंडलबार संदर्भ में उपलब्ध होगा।

app.use((req, res, next) => { 
    // get user from cookie, database, etc. 
    res.locals.user = user; 
    next(); 
}); 

आप अपने अन्य मार्गों से पहले इस मिडलवेयर डाल, तो उपयोगकर्ता वस्तु तो उपलब्ध हर जवाबी कार्रवाई के लिए किया जाएगा: तो आप इस तरह की कुछ मिडलवेयर बना सकता है।

अपने Handlebars में

तो फिर तुम बस का उपयोग टेम्पलेट एक सशर्त:

{{#if user}} 
    <a href=/logout>Logout</a> 
{{else}} 
    <a href=/login>Login</a> 
{{/if}} 

यहाँ समान मिडलवेयर का उपयोग कर लाइव कोड का एक उदाहरण है: https://github.com/digitallinguistics/dlx-org/blob/master/lib/users.js#L38

और यहाँ एक Handlebars टेम्पलेट का एक उदाहरण है कि मिडलवेयर का उपयोग करता है है : https://github.com/digitallinguistics/dlx-org/blob/master/views/layouts/main.hbs#L47

आप देख सकते हैं कि मैं नेविगेशन बार में उपयोगकर्ता का नाम भी प्रदर्शित करता हूं।

संबंधित मुद्दे