我使用此代碼檢查用戶令牌是否正確,并將用戶放入 req.locals
exports.isLoggedIn = async (req, res, next) => {
if (req.cookies.jwt) {
try {
const decoded = await promisify(jwt.verify)(
req.cookies.jwt,
process.env.JWT_SECRET
);
const currentUser = await User.findById(decoded.id);
if (!currentUser) {
return next();
}
if (currentUser.changedPasswordAfter(decoded.iat)) {
return next();
}
res.locals.user = currentUser;
return next();
} catch (err) {
return next();
}
}
next();
};
之后,我渲染視圖。這是我的標題,這里應該顯示用戶名,但它似乎是空的。有一個用戶,它不是空的,但由于某種原因,我無法使用 hbs 直接訪問他的名字
<nav class="navbar navbar-dark navbar-expand p-0 bg-dark">
<div class="container">
{{#if user}}
<ul class="navbar-nav d-none d-md-flex mr-auto">
<li class="nav-item"><a class="nav-link logout" href="/users/logout" data-abc="true">Log Out</a></li>
</ul>
<ul class="navbar-nav d-flex align-items-center">
<li class="nav-item">
<div class="d-flex flex-row"><img src="https://i.imgur.com/EYFtR83.jpg" class="rounded-circle"
width="30"></div>
</li>
<li class="nav-item"><a href="#" class="nav-link d-flex align-items-center" data-abc="true">
<span>{{user.name}}</span>
<i class='bx bxs-chevron-down'></i></a>
</li>
</ul>
{{else}}
<ul class="navbar-nav d-none d-md-flex mr-auto">
<li class="nav-item"><a class="nav-link" href="/users/login" data-abc="true">Log In</a></li>
<li class="nav-item"><a class="nav-link" href="/users/signup" data-abc="true">Sign Up</a></li>
</ul>
{{/if}}
</div>
有任何想法嗎?
UPD 添加了渲染頁面的 hbs 配置和控制器功能
app.set('view engine', 'hbs');
hbs.registerPartials(__dirname "/views/partials");
app.engine("hbs", engine ({
layoutsDir: "views/layouts",
defaultLayout: "layout",
extname: "hbs"
}
));
此外,這里是控制器方法,呈現頁面
exports.getHomePage = async (req, res, next) => {
res.render('home');
};
uj5u.com熱心網友回復:
Express 中的視圖無權訪問請求物件。他們只能訪問作為locals引數傳遞的物件中的資料:
const locals = { put: "some data here" };
res.render('home', locals);
您根本沒有傳遞任何資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/403693.html
標籤:
