【问题标题】:How to properly access session cookie in route如何在路由中正确访问会话 cookie
【发布时间】:2018-11-11 12:04:33
【问题描述】:

我正在尝试使用 cookie-session 在我的 express 应用中存储一个值。我想在我的任何路线中访问这个值。 我可以在我的 index.js 文件中完美地做到这一点。

var app = express();
app.set("trust proxy", 1);
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);


app.get("/", function(req, res, next) {
  // Update views
  req.session.views = (req.session.views || 0) + 1;
  req.session.key = "some key I set"
  // print out 3 views key = some key I set
  res.end(req.session.views + " views " + "key = " + req.session.key);
});

我遇到的问题是,当我尝试在其中一条路线的会话中设置或获取任何内容时,我收到一条错误消息

无法设置未定义的属性“键”

这是我的 testRoute 文件

module.exports = app => {
  app.get("/test",(req, res) => {
    // throws error
    res.end(req.session.key);
  });
};

Ant 这就是我让我的 index.js 文件知道它的方式。

var app = express();
// Tell Index about my route
require("./routes/authRoutes")(app);

app.set("trust proxy", 1);
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

我对表达和围绕中间件和路由的概念非常陌生。

在我的所有路由中授予对 cookie 会话的访问权限的正确方法是什么。

【问题讨论】:

  • 你把require("./routes/testRoute")(app);放在代码的什么地方(哪一行)
  • 你在哪里添加了 app.use(router)?
  • @Alex 我更新了我的问题。
  • 是的,我以为是这样。看我的回答
  • @SushobhNadiger 我从使用 app.use(router) 中学到的例子都没有

标签: node.js express session-cookies


【解决方案1】:

我怀疑问题是您在设置会话之前 require 正在设置您的路线:

var app = express();
require("./routes/testRoute")(app);
app.set("trust proxy", 1);

//you haven't told your app about the session
require("./routes/testRoute")(app);

///until now....
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

试试这个

var app = express();
require("./routes/testRoute")(app);
app.set("trust proxy", 1);

app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

//require route after session has been set up
require("./routes/testRoute")(app); 

作为一个方面,Router 可能会更好地使用,require'ing 你的路线。
完整详情:https://expressjs.com/en/4x/api.html#router

【讨论】:

  • 好的,你的建议很有意义。不幸的是,在进行编辑后,我遇到了同样的错误。
  • 抱歉,我评论得太早了。这是正确的答案。也感谢您的链接
  • 没问题,很高兴它有帮助
猜你喜欢
  • 2020-04-12
  • 2018-06-30
  • 2011-01-15
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2011-06-17
相关资源
最近更新 更多