为什么Express JS中的修改请求不保持POST和GET请求之间的值?

时间:2014-08-22 10:03:05

标签: node.js express http-post http-get

对于测试项目我需要使用仅由用户名定义的用户登录,并使用该用户加载新页面。 我在tamplate中的代码是:

        <form action="/login" method="post">
        username: <input type="text" name="username"><br>
        password: <input type="password" name="password">
        <button type="submit" style="float: right;">Login..</button>
        </form>

app.js中的Express代码是:

app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.use(function (req, res, next) {
    req.usersession = { "userId" : "myUser" };
    next();
})
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
  if ('development' == app.get('env')) {
   app.use(express.errorHandler());
}
//routes
app.get('/project', routes.project); 
app.get('/dashboard', routes.dashboard);
app.get('/', routes.index);
app.post('/addProject', routes.addProject); 
app.post('/login', routes.login); 

和/ login函数:

exports.login = function (req, res) {
var query = req.body.username;
Users.
findOne({ 'username' : query }).
exec(function (err, result) {
    if (err) res.send('Username not found'); 
   // exports.dashboard();     
    req.usersession = result._id;
});

/ dashboard

exports.dashboard = function (req, res) {
Project.
find( { "project._addedBy" : req.usersession.userId}).
select("project.projectName project._addedBy").
exec(function (err, result) {
    if (err) throw err;
    var data = { "rendData" : result };
    res.render('dashboard', data);
});
};

当浏览器重定向到/ dashboard时,它会以req.usersession - myUser的初始数据开头。 我如何在两个页面加载之间传递req.usersession?

很抱歉,如果我的条款不对,但我是网络新手。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为问题在于你正在混合这些方法。中间件app.use函数登录假用户,并为每个请求执行此操作。然后,您通过检查数据库中的表单数据来尝试进行实际登录。中间件将覆盖每个其他请求的实际登录。你应该选择一个或另一个 - 如果你不关心这个研究项目的话,那就是带有db检查和会话或模拟登录中间件的真实登录......