NodeJS express - 如何在路由器中添加会话数据?

NodeJS express - 如何在路由器中添加会话数据?

问题描述:

我需要添加一些会话数据快速路由器(使用快速会话和护照)。NodeJS express - 如何在路由器中添加会话数据?

我正确地存储数据到DB(蒙戈)用户记录并尝试将值设置为会话数据:

req.user.myData = "my session data"; 

不幸的是,用户数据仅在通过Passport用户授权连载。所以“myData”不会存储到当前会话中。当新用户会话启动时,数据从数据库正确加载并可用。

是否有任何方法(我期望如此)在当前会话中提供数据?在ExpressJS

+0

你不应该使用'req.session.myData'吗?通过向会话对象添加属性并保存会话,将数据放入会话中。该属性将成为未来请求会话对象的一部分。 – jfriend00

大多数这样的事情的世界进行使用中间件:

1)middlewares文件夹中创建的js文件:populateUserData.js

'use strict'; 

module.exports = (req, res, next) => { 
    if(!req.user) req.user = {}; 
    req.user.someData = 'something'; 

    next(); 
} 

2.1),将其固定护照后:

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(require('./middlewares/populateUserData')); 

2.2)将它附加到spe cific路线:

const populateUserData = require('./middlewares/populateUserData'); 

route.get('/api/users/me', 
    passport.authenticate('basic', { session: false }), 
    populateUserData, 
    (req, res) => { 
    res.json({ id: req.user.id, username: req.user.username }); 
    }); 
在组航线

2.3):

app.use('/api/users', 
    passport.authenticate('basic', { session: false }), 
    require('./middlewares/populateUserData'), 
    require('./routes/api/users')); 

也可以创建自己的中间件,这将是有益的,

例如:https://github.com/num8er/alttab-nodejs-challenge/blob/master/app.js#L19

+1

Thx为您的答案。它在其他情况下帮助我。 但在我原来的情况下没有。这是相当具体的应用程序/路线。我能够做一点解决方法。 而不是存储到用户数据,我直接存储会话数据: req.session.myData; 然后检查用户和会话数据: 'var myData = req.user.myData;如果(req.session.myData){ myData = req.session.myData; }' – dalicrosKH

+0

如果您想在应用程序路径中使用它,请检查我的更新答案,正如我所说的“大多数这样的事情都是使用中间件完成的,cuz express本身就是基于中间件的框架。docs:http://expressjs.com/zh/guide /writing-middleware.html你可以链接你想要的中间件的数量。 – num8er

+0

这正是我需要的。 – dalicrosKH