NodeJ中发生事件后如何重定向页面

时间:2019-01-01 21:14:30

标签: node.js express socket.io ejs

在我的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
});

有没有什么方法可以在表达事件中而不是在socket.io回调或等待事件完成的阻塞调用中进行渲染操作?

2 个答案:

答案 0 :(得分:0)

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("/");
  });
});

答案 1 :(得分:0)

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

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

承诺也是一个很好的建议,再次感谢您的所有答复