我使用expressJS,我对会话有点困惑。我有1个单独的expressJS服务器,可以从不同的URL访问。根据连接到达的位置(打开哪个URL),使用不同的数据库来提供响应。而且我可以看到这些会议存在冲突。
我的假设是我应该根据请求的URL设置不同的cookie名称,但似乎我无法在会话配置中指定一个功能。
有什么想法吗?
var app = express();
var session = require('express-session');
var router = express.Router();
app.use('/a_route', router);
app.use('/b_route', router);
router.use(session({
genid: function(req) {
return require('crypto').randomBytes(48).toString('hex'); // use UUIDs for session IDs
},
secret: 'JollynakAjollynakAjollynakApamPam',
resave: false,
saveUninitialized: false,
name: **THIS SHOULD BE DYNAMIC BASED ON URL???**
}));
修改
//declare session variable
var sess ="";
router.post('/login', function (req, res, next) {
sess = req.session;
var uname = req.body.username;
var pwd = req.body.password;
var authResult = null;
sess.username = uname;
sess.instance = req.baseUrl.replace('/', '');
})
一个AJAX调用示例
router.get('/getSomething', function (req, res) {
service.getCaps(sess.instance, function (response) {
res.send(JSON.stringify(response));
});
});
答案 0 :(得分:0)
您的Cookie不一定与您的数据库绑定。您的所有路线共享一个cookie商店。 “名称”是指会话cookie的名称,这适用于所有路由(这就是为什么快速会话是app.use
中调用的中间件)。一般来说,每个快递应用只会有一个会话。如果您真的想要将它们与多个会话存储区分开来,您将需要创建多个快速应用程序来处理您的路线。
在您的情况下,看起来您应该使用两个完全不同的路由器和两个完全独立的URL。您将拥有一些重复的代码,但由于您正在处理两个不同的数据库,两个不同的“会话”和两个不同的URL,因此将它们分开是有意义的。然后,您可以为每条路线设置唯一的会话变量(例如req.session.aLogin
和req.session.bLogin
);
var routerA = express.Router();
var routerB = express.Router();
app.use('/a_route', routerA);
app.use('/b_route', routerB);
另一种方法是在路线中处理单独的会话变量。
router.post('/login', function (req, res) {
req.session[req.baseUrl + 'auth'] = true;
});
router.get('/something', function (req, res) {
if (req.session[req.baseUrl + 'auth'] { //User is authenticated for this particular database
//Rest of your code
}
});