等待后进行保存时,快速会话不持久

时间:2019-11-22 17:46:30

标签: node.js express long-polling express-session

我遇到了一些非常奇怪的情况,实际上无法理解正在发生的事情。感谢您对以下原因的解释。

我有带有express和express-session的nodejs服务器

我需要有一个端点,该端点将异步启动一些流,这意味着客户端发送命令开始耗时,并且客户端不会等到流完成。流程本身应该做一些需要时间的事情,然后将结果存储在会话中。

另一个enpoint随后将在任何时间点从会话返回值

但是问题是会话没有持续。

这是我的server.js的最小版本,它重现了问题

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
    secret: 'testsecret',
    name: 'testmytresure',
    saveUninitialized: false,
}));

const delayedResponse = () => new Promise(resolve=> setTimeout(() => resolve(`done ${new Date()}`), 200));

const startAsyncFlow = async session => {
    const result = await delayedResponse(); //if remove this call and make result static value - everything works
    session.test = `Result value ${result}`;
    session.save();
}

app.get('/start', (req, res) => {
    startAsyncFlow(req.session);
    res.json('started');
})

app.get('/check', (req, res)=> {
    res.json(req.session);
})

app.listen(8081, () => console.log(`Listening on port 8081`));

我的packages.json

{
  "name": "isitreallybug",
  "private": true,
  "scripts": {
    "start": "nodemon server.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "express-session": "^1.17.0",
    "nodemon": "^2.0.1"
  }
}
  1. 运行npm运行启动或毛线启动
  2. 致电http://localhost:8081/start
  3. 呼叫http://localhost:8081/check-它不会返回任何内容,就好像会话没有更新

奇怪的是:

  • 如果我从会话参数中删除“ saveUninitialized:false”,那么一切正常
  • 如果我删除了delayResponse并将任何await something()放在 “ startAsyncFlow()”的结尾-会话已更新

有人可以解释发生了什么吗?为什么等待后我无法与会话交互? 预先感谢

0 个答案:

没有答案