主要的NodeJS会话管理

时间:2017-01-20 18:39:30

标签: node.js express

我对NodeJS和ExpressJS很新,并且我试图让main.js中的会话管理流程得以实现。

我目前的工作是什么:

    app.get('*', function(req, res){
    var page = getPage();

    session_.initSession( req, res, function( ){
        loggedIn = false;
        if( req.session && typeof req.session.username !== "undefined" ){
            loggedIn = true;
            userFName = req.session.first_name;
            userLName = req.session.last_name;
        }
        if( !loggedIn ){
            res.render('pages/login', { message: "<div class='notice centered' style='width: 40%;'>Please login</div>" });
            returnFlag = true;
            return;
        } else {
            if (page.length < 1){
                // render index page here ...
                returnFlag = true;
                return;
            }

            // render 'test' page
            if( page == 'test' ){
                // do test functions here...

                returnFlag = true;
                return;
            }
        }
    });

    if( returnFlag == true ){
        return;
    } 

    res.render('partials/home', { message: "404 not found (unknown page GET request)" });
    return;
});

app.post('*', files, function(req, res){
    var page = getPage();

    if( page == 'test' ){
        // do test functions here...

        returnFlag = true;
        return;
    }

    if( returnFlag == true ){
        return;
    } 

    res.render('partials/home', { message: "404 not found (unknown page POST request)" });
    return;
});

这样做的问题是,即使没有会话,也正在处理POST请求。我已经尝试在app.get和app.post代码块上方添加app.all / use块来设置会话,但是app.get / post块没有得到处理。构建这个的最佳方法是什么,以便所有请求通过会话管理进行过滤,然后在适当的会话到位时进入页面请求块?

1 个答案:

答案 0 :(得分:1)

Express中的中间件功能正是您所寻求的。

  

中间件函数是可以访问请求对象(req),响应对象(res)以及应用程序请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为next的变量表示。

从Express的文档中了解更多信息 - here

中间件可以像链一样连接,并按照您编写的顺序进行处理。只要您执行“下一步”即可。功能,您可以根据需要进行链接。

因此,在实际处理POST请求之前,您可以退出并重定向用户,否则执行下一个功能以继续处理。

以下是如何简化代码的示例。

function _sessionAuthorization(req, res, next) {

    if(typeof req.session.username == "undefined") {
        return res.redirect("/login");
    } else {
        next();
    }

}


app.get('*', function(req, res){
    res.render('partials/home', { message: "404 not found (unknown page GET request)" });
});

app.post('*', files, _sessionAuthorization, function(req, res){
    res.render('partials/home', { message: "404 not found (unknown page POST request)" });
});