【问题标题】:How to redirect a page after an event occurs in NodeJsNodeJs中发生事件后如何重定向页面
【发布时间】:2023-03-08 15:52:01
【问题描述】:

在我的 NodeJs 应用程序中,我想在套接字 IO 事件发生时呈现一个文件。

我正在使用 python 运行一个不同的 socket.io 服务器,它在事件发生时进行一些计算并触发另一个返回事件到 NodeJs 端。但是,重定向操作在返回事件之前完成,并且页面在没有新数据的情况下呈现。我真正想要的是在返回事件完成后使用新数据“x”应用重定向。

let x = []

app.get("/", function(req, res) {
  res.render('home', {'x' : x});
});

app.post("/", function(req, res) {
  socket.emit('main event', 'data'); //trigger the main event
  res.redirect("/");
})

socket.on('return event', (data) => { //this is the return event
  x = data.x;
  // I want render to happen after this line
});

有没有什么方法可以让我不在 express 事件中进行渲染操作,也可以在 socket.io 回调或等待事件完成的阻塞调用中进行?

【问题讨论】:

  • 您好,您可以例如在您的主要操作中执行一个承诺,并且只在它完成后渲染视图......

标签: node.js express socket.io ejs


【解决方案1】:

res.redirect添加到socket.emit中的确认回调。

app.post("/", function(req, res) {
  socket.emit('main event', 'data', function(err, msg) {
    if(err) throw new Error(err);

    res.redirect("/");
  });
});

【讨论】:

    【解决方案2】:

    感谢您的所有回答。我真正需要的是像这样将socket.on事件放入app.post中。

    app.post("/", function(req, res) {
      socket.on('return event', (data) => {
        x = data.x;    
        res.redirect("/");
      });
      socket.emit('main event', 'data');
    })
    

    Promises 也是一个很好的建议,再次感谢您的所有回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      相关资源
      最近更新 更多