使变量在EJS模板中全局可用

问题描述 投票:0回答:1

我正在努力在节点应用程序中设置身份验证。我决定使用EJS作为模板解决方案,并使用PassportJS进行身份验证。这些都在ExpressJS上运行。我遇到的问题是,我需要某种方法来使req.isAuthenticated()或任何变量及其属性在模板中全局可用。这是一个问题,因为我决定在所有模板上使用的部分中进行一些条件渲染。如果要尝试使此应用程序正常工作,则需要将每个res.render("template")传递给包含req.isAuthenticated()的对象。我认为这不是最好的方法。我缺少这个问题的解决方案吗?

这里是我当前设置的示例

header.ejs(PARTIAL)]

<!DOCTYPE html>
<html>

<head>
    <title>formla</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" />
    <link rel="stylesheet" href="/stylesheets/style.css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</head>

<body>

    <head>
        <nav>
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/protected">Profile</a></li>

                <%if(!isUserAuth){%>

                <li><a href="/register">Register</a></li>
                <li><a href="/login">Login</a></li>

                <%}else{%>
                    <li><a href="/logout">Logout</a></li>
                <%}%>    
            </ul>
        </nav>
    </head>

index.ejs

<%- include("./partials/header.ejs") -%>

<div class="container">
    <h1>Home</h1>

    <a href="/register">Register</a>
    <br />
    <a href="/login">Login</a>
</div>
<%- include("./partials/footer.ejs") -%>

任何帮助将不胜感激。

我正在努力在节点应用程序中设置身份验证。我决定使用EJS作为模板解决方案,并使用PassportJS进行身份验证。这些都在ExpressJS上运行。我是问题...

javascript node.js ejs
1个回答
0
投票

Express res.locals对象用于此目的。您只需要为私有路由添加auth检查中间件。并将其添加到响应的locals对象中,该对象将可以在ejs中访问。

© www.soinside.com 2019 - 2024. All rights reserved.