Javascript 如何使用路线操纵导航栏?
我的布局中有一个导航栏。hbs:Javascript 如何使用路线操纵导航栏?,javascript,html,node.js,express,Javascript,Html,Node.js,Express,我的布局中有一个导航栏。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
<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>
虽然这似乎可行,但我需要将islog
、issign
、los
和sign
变量添加到我拥有的每个网页中
有更好的方法吗?您可以拥有一个全覆盖路由器,并在每次响应之前运行loggedin逻辑
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);
});
我在我的项目中做到了这一点,您可以使用类似的方法:- JS
var cookieuser = req.cookies.userId || '';
res.render('index', {
ID : cookieuser,
data : jsonresponse.entries
});
<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>
<% } %>
EJS
var cookieuser = req.cookies.userId || '';
res.render('index', {
ID : cookieuser,
data : jsonresponse.entries
});
<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>
<% } %>
您还可以使用
res.locals
。当模板编译时,res.locals
中的任何内容都将在Handlebar上下文中可用。因此,您可以制作如下中间件:
app.use((req, res, next) => {
// get user from cookie, database, etc.
res.locals.user = user;
next();
});
如果将此中间件放在其他路由之前,则用户对象将可用于每个响应
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);
});
然后在车把模板中,您只需使用条件:
{{#if user}}
<a href=/logout>Logout</a>
{{else}}
<a href=/login>Login</a>
{{/if}}
{{#if user}
{{else}
{{/if}