【问题标题】:Node with Express: Storing session variables, multiple response.status updates带有 Express 的节点:存储会话变量、多个 response.status 更新
【发布时间】:2017-04-13 23:20:48
【问题描述】:

我有一个在 node.js 中运行冗长进程的应用程序。我将这些冗长的过程限制为每个用户一个。

当用户开始一个漫长的过程时,我会这样做

req.session.busy = true;
req.session.save();

当这个过程完成后,我会做

req.session.busy = false;
res.status(200).json({
  done: true
});

如果用户同时尝试启动另一个冗长的进程,我会这样做

if (req.session.busy) {
    res.status(200).json({
        busy: true
    });
}

我想做的是发送响应以确认已收到请求。

res.status(200).json({
  process_started: true
});

但这会结束响应。我不能再在运行进程结束时设置 busy = false 并发送进程完成的响应。

有什么方法可以保存会话,发送已收到请求的状态,然后在进程完成时发送 status(200) 响应?

也许除了 200 之外还有另一种状态,这将使响应在节点中保持活动状态。

我试过了

res.status(100).json({
  process_started: true
});

希望 http 状态代码 100 - Informal(继续)可以解决问题,但没有雪茄。此后,当我尝试发送状态(200)时,应用程序将崩溃。错误:发送后无法设置标头。

【问题讨论】:

  • 可能想看看网络套接字(socket.io for node)

标签: node.js express response


【解决方案1】:

这里的重点是您只能发送一次回复。当页面被加载时,它不会“等待”另一个响应并更新自己,它已经完成了。这就是您无法发送其他回复的原因。

  1. 第一个选项:显示一个通过 AJAX 轮询结果(甚至是进度)的站点。您必须将状态服务到某处的第三条路线,然后轮询第三条路线。
  2. 第二个选项:使用套接字将数据发送给用户(参见:http://socket.io/

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多