无法使用 express 和 hbs 视图访问用户属性(作为 res.locals.user 传递)

Cannot access user properties (passed as res.locals.user) using express and hbs view

我用这段代码检查用户令牌是否正确,并将用户放入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();
};

之后,我渲染视图。这是我的header,这里应该显示用户名,但好像是空的。有一个用户,它不是空的,但由于某种原因我无法使用 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>

有什么想法吗?

更新 添加了呈现页面的 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');
};

Express 中的视图无权访问请求对象。他们只能访问作为 locals 参数传递的对象中的数据:

const locals = { put: "some data here" };
res.render('home', locals);

您根本没有传递任何数据。