【问题标题】:Node.js req.session variable undefinedNode.js req.session 变量未定义
【发布时间】:2016-06-16 05:28:27
【问题描述】:

main.js(仅相关部分)

var express = require('express');
var app = require('express')(),
    expressSession = require('express-session'),
    cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

// Create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// Access Middleware
var connect = require('connect');
var http = require('http');
var session = require('express-session');

app.use(express.static('public'));
app.use(expressSession({
    secret: 'SECKEY',
    resave: true,
    saveUninitialized: true
}));

app.post('/process_post', urlencodedParser, function (req, res) {
    // Prepare output in JSON format
    var response = {
        first_name:req.body.first_name,
        last_name:req.body.last_name
    };
    console.log(response);


    var post = req.body;
    if(post.first_name === 'u' && post.last_name === 'p') {
        res.session.user_id = 3;
        res.redirect('/home');
    } else {
        res.send('INVALID');
    }

    res.end(JSON.stringify(response));
});

这是我得到的错误:

TypeError: Cannot set property 'user_id' of undefined
   at D:\Users\Winston\Code\NodeJS Projects\Sample\main.js:43:29
   at Layer.handle [as handle_request] (D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\express\lib\router\layer.js:95:5)
   at next (D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\express\lib\router\route.js:131:13)
   at D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\body-parser\lib\read.js:121:5
   at invokeCallback (D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\body-parser\node_modules\raw-body\index.js:262:16)
   at done (D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\body-parser\node_modules\raw-body\index.js:251:7)
   at IncomingMessage.onEnd (D:\Users\Winston\Code\NodeJS Projects\Sample\node_modules\body-parser\node_modules\raw-body\index.js:308:7)
   at IncomingMessage.emit (events.js:104:17)
   at _stream_readable.js:908:16
   at process._tickCallback (node.js:355:11)

req.session 不起作用,但我想我定义了一切。我已经安装了连接和快速会话中间件。以后如何调试这样的问题?

编辑 1:打印出 req.session

{ cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }
{ first_name: 'u', last_name: 'p' }
{ cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }

【问题讨论】:

  • 我已经实现了那个解决方案。 Error: Most middleware (like session) is no longer bundled with Express and must be installed separately. Pl ease see https://github.com/senchalabs/connect#middleware. 它在 express.session 中哭泣。我相信我已经安装了 express-session 并将其放在 package.json 中?这可能是问题吗?

标签: javascript node.js


【解决方案1】:

你打电话给res.session而不是req.session

【讨论】:

  • 感谢您的回复,我已修复,但完全相同的错误仍然存​​在。
【解决方案2】:

您在下面更改代码:

res.session.user_id = 3;

req.session.user_id = 3;

【讨论】:

  • 感谢您的回复,我已修复,但仍然存在完全相同的错误
  • 你能给我显示 req.session 结果和你的错误吗?
  • 可以查看“req.session.identify”变量信息吗?如果存在,您可以在此对象中看到您的 user_id。
  • 看来 req.session.identify 是未定义的,但还有更多信息
  • 我读到了你的“编辑 1:打印出 req.session”。 req.session 信息结果是否完整?
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 2012-09-24
  • 2014-04-24
  • 2016-09-28
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多