Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在我的主把手布局中为express sessions登录/注销编写条件?_Node.js_Session_Express_Login_Logout - Fatal编程技术网

Node.js 如何在我的主把手布局中为express sessions登录/注销编写条件?

Node.js 如何在我的主把手布局中为express sessions登录/注销编写条件?,node.js,session,express,login,logout,Node.js,Session,Express,Login,Logout,我在控制器中写入了我的登录/注销路由 //LOGIN FORM app.get('/login', function (req, res) { res.render('../views/signup-signin/login'); }); //LOGIN POST app.post('/login', function (req, res) { User.find(req.body.username, function (user) { bcrypt.compa

我在控制器中写入了我的登录/注销路由

//LOGIN FORM
app.get('/login', function (req, res) {
    res.render('../views/signup-signin/login');
});

//LOGIN POST
app.post('/login', function (req, res) {
    User.find(req.body.username, function (user) {
        bcrypt.compare(req.body.password, user.password, function (err, result) {
            if (result) {
                req.session.currentUser = user.id;
                res.redirect('/');
            } else {
                res.redirect('/login');
            }
        });
    });
});

//LOGOUT
app.delete('/logout', function (req, res) {
    req.session.currentUser = null;
    res.redirect('/');
});
我遇到的问题是无法在“main.handlebar”布局中编写if/else语句,当req.session.currentUser=null时显示注册/登录,当req.session.currentUser=user.id时显示注销

<div id="signin_up">
        <a href="/signup"><button>Sign Up</button></a>
        <a href="/login"><button>Login</button></a>
</div>

<form action="/logout" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="Logout">
</form>

我不知道如何访问会话id并将其写入“main.handlebar”文件中的脚本标记中

有人能帮我让这个功能正常工作吗


提前谢谢

我一直在处理一个类似于您所描述的使用Node/Express/Handlebar的注册/登录界面的问题,我找到了一个很好的解决方案,您所做的就是在加载页面的路径中将所需的会话数据作为变量传递

作为说明,我认为你已经弄明白了

您必须意识到的主要一点是,Handlebar布局/视图(即FileName.handlebar)是路由中传递的页面(或动态)变量

因此,您只需转到路由,确定会话是否已设置,然后将其作为变量传递到加载页面

在Handlebar中,您可以使用以下方式访问传递的变量:

{{variable}}
在HTML中

考虑到这一点,回到您的问题,您需要基于此变量创建一个条件车把,如下所示

{{#if variable}}
<!-- SHOW LOGIN -->
{{else}}
<!-- SHOW LOGOUT -->
{{/if}}
然后在把手布局中,我做了如下操作:

{{#if admin}}
<!-- SHOW WHAT I NEED -->
{{/if}}

否则,我很确定它会被传递到页面,并转义HTML字符。

main.handlebar
只能包含
标记。身体中的任何东西都可以是分部,您可以将值发送给分部<代码>{{>部分值}。这有点帮助。我试图在传入会话id为的对象时重新呈现“主页”。然后,我编写jQuery,根据会话id是否设置,将这些按钮放在DOM上。但是,它只在该页面上工作,当我注销时会中断。如何将对象传递到布局?
{{#if admin}}
<!-- SHOW WHAT I NEED -->
{{/if}}
{{{HTMLVariable}}}