【问题标题】:Can I fetch "req.session" (express-session) data?我可以获取“req.session”(快速会话)数据吗?
【发布时间】:2018-10-21 20:02:40
【问题描述】:
app.get("/route1", async (req, res) => {
  res.header('Access-Control-Allow-Origin', '*');
  console.log('TCL: req.session', req.session);
  res.send(req.session);
});

app.get("/route2", (req, res) => {
  req.session.test = "test";
  console.log('TCL: req.session', req.session);
  res.send(req.session);
});

route2 设置会话数据,我的终端/浏览器记录它就好了。 如果我在浏览器 url 栏中访问 route1,则数据会成功显示在浏览器和终端中

如果我尝试在 react 组件中获取 route2,我不会获得存储在 req.session.test 中的数据,并且我的终端只记录其中的 cookie 部分,如下所示:

TCL: req.session Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: false,
     secure: false } }

配置:

app.use(session({
    secret: prodkeys.sessionSecret,
    resave: false,
    saveUninitialized: false,
    cookie: {
        httpOnly: false,
        secure: false,
      }
}));

在组件中:

const isSession = await axios.get("http://localhost:5001/route1",
   {credentials: 'include', proxy: true});

【问题讨论】:

  • 你有没有用 Postman 看看调用 API 会发生什么?

标签: javascript reactjs express fetch express-session


【解决方案1】:

尝试使用withCredentials: true 而不是credentials: 'include' 我在官方文档中找不到凭据选项。

【讨论】:

  • 是的,在你评论安装 cors 之前,我尝试了几分钟,谢谢!
【解决方案2】:

我不是 100% 修复了哪个部分,但是我安装了 cors 并以这种方式配置了我的 fetch 并且它解决了它:

const isSession = await axios.get("http://localhost:5001/route1",
    {credentials: 'include', proxy: true, withCredentials: true});

Index.js:

app.use(cors({
    origin: ['*'],
    methods: ['GET','POST'],
    credentials: true // enable set cookie
}));

【讨论】:

  • 我认为这是由于代理选项。我猜它需要启用 CORS。
猜你喜欢
  • 2021-10-12
  • 2016-05-06
  • 2017-08-02
  • 2018-03-27
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 2014-06-14
  • 2012-08-25
相关资源
最近更新 更多