【问题标题】:client-sessions nodejs / Express - error: Cannot set property 'mydata' of undefined客户端会话 nodejs / Express - 错误:无法设置未定义的属性“mydata”
【发布时间】:2016-06-04 01:21:40
【问题描述】:

我正在尝试在 nodejs / Express 中使用客户端会话中间件,但出现以下错误:Cannot set property 'mydata' of undefined.

我也看过这篇文章,但找不到关于我为什么会收到错误的更多线索。 node-js-client-sessions-not-creating-req-session

var bodyParser = require('body-parser');
const express = require('express');

const app = express();
const clientSessions = require("client-sessions");

var urlencodedParser = bodyParser.urlencoded({ extended: false });
var router = express.Router();

app.use(clientSessions({
  cookieName: 'mydata', // cookie name dictates the key name added to the request object
  secret: 'longsecretkeyorwhatever', // should be a large unguessable string
  duration: 24 * 60 * 60 * 1000, // how long the session will stay valid in ms
  activeDuration: 1000 * 60 * 5 // if expiresIn < activeDuration, the session will be extended by activeDuration milliseconds
}));

/* Form POST handler */
router.post('/', urlencodedParser, function(req, res) {
    if (!req.body) return res.sendStatus(400);

    if(req.body.firstName){
        req.session_state.mydata = req.body.mydata;
    }
})

【问题讨论】:

    标签: node.js session express


    【解决方案1】:

    client-sessions 的文档说明:

    cookie 名称指示添加到请求对象的键名

    由于您将 firstName 设置为 cookie 名称,因此会话对象可用作 req.firstName

    req.firstName.mydata = req.body.mydata
    

    【讨论】:

    • 抱歉,这是我原始代码中的复制/粘贴错误。即使 cookieName 正确,我仍然会收到错误消息。
    • 您更改了 cookie 名称,但未使用正确的会话变量名称。应该是req.mydata,而不是req.session_state
    • 感谢您帮助我解决这个问题,现在这很有意义。我原来的错误现在消失了。我现在需要从另一个路由 js 文件中读取 cookie 数据,但是我的数据不可用,它是未定义的。有什么诀窍吗?我在第二个脚本上再次尝试了应用程序和客户端会话,但这不起作用。
    • 你应该只在你的主应用上声明一次client-sessions中间件,然后再声明任何路由器。
    • 我试图让客户端会话全球化。我现在得到:无法将客户端会话设置为非对象。这里是查看app.js和index.js代码的链接codeshare.io/T76CD
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多