Conditional app.use in node - express
Conditional app.use in node - express
是否可以在app.js中有条件地使用app.use
?快速cookie会话无法动态更改maxAge
的值,我曾想过做这样的事情,但我遇到了一些错误:
app.use(function(req,res,next ){
if(typeof req.session == 'undefined' || req.session.staySignedIn === 'undefined'){
//removing cookie at the end of the session
cookieSession({
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
});
}else{
//removing cookie after 30 days
cookieSession({
maxAge: 30*24*60*60*1000, //30 days
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
});
}
next();
});
代替正常使用:
app.use(cookieSession({
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
}));
现在我得到以下错误:
无法读取未定义的属性"user"
我相信它指的是这条线(尽管它没有说具体在哪里)
req.session.user;
Express中的中间件是function (req, res, next) {}
之类的函数。在您的示例中,cookieSession(options)
将返回这样一个函数,但在您的中间件中,如果不运行该函数,则会忽略cookieSession
的返回值,即您要运行的中间件。然后运行next()
。
相反,您想做的是在您的条件中间件中执行实际的中间件。类似这样的东西:
app.use(function (req, res, next) {
var options = {
httpOnly: true,
secure: false,
secureProxy: true,
keys: ['key1', 'key2']
};
if(typeof req.session == 'undefined' || req.session.staySignedIn === 'undefined') {
options.maxAge = 30*24*60*60*1000; // 30 days
}
return cookieSession(options)(req, res, next);
});
您可以使用此插件Express Conditional Tree中间件。
它允许您组合多个和异步中间件。看看吧!您可以创建两个类(一个用于第一种情况,一个用于第二种情况),分别在applyMiddleware
函数中编写代码,然后将这些类导入主javascript文件中,并使用orChainer将它们组合起来。有关更多信息,请参阅文档!
相关文章:
- Express/Node的奇怪(缓存)问题
- 如何使用javascript express node将变量从控制器中的一个方法公开.js到另一个控制器.js
- 如何使用express node.js打印到html
- websocket可以使用http模块,但不能使用express(node.js)
- 处理express/node中模板的数据
- 如何在 Express/Node.js 中反序列化 JSON 数据
- 使用 Express (node.js) 从客户端 Javascript 发布查询
- 在 express/node.js API 中进行高效的服务器端 JavaScript 内存管理
- 在Express + Node.js中处理已发布的数据
- 将控制器变量传递到Express/Node.js中的视图
- 将Angular与Express(Node.js)结合使用时处理路由
- Express(node.js)-res.send只发送部分响应
- 使用HTTPS和HTTP的Express(node.js)
- 了解Express Node.js中的vhost
- 如何在 Express (Node.js) 中获取从表单传递的数据
- 未在express/node.js中加载Javascript文件
- 将JSON文件以express (node)形式保存到服务器
- 在Express + Node JS中处理根目录/路由
- 试图通过express node.js提供ejs文件时出错
- Express node.js从node路由向另一个服务器发出get请求