我对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块没有得到处理。构建这个的最佳方法是什么,以便所有请求通过会话管理进行过滤,然后在适当的会话到位时进入页面请求块?
答案 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)" });
});