Как перенаправить страницу после события в NodeJs - PullRequest
0 голосов
/ 02 января 2019

В моем приложении NodeJs я хочу отобразить файл, когда происходит событие ввода-вывода сокета.

Я использую отдельный сервер socket.io с python, который выполняет некоторые вычисления при возникновении события и запускает другое возвращаемое событие на стороне NodeJ.Однако операция перенаправления завершается до того, как событие возврата и страница отображаются без новых данных.На самом деле я хочу применить перенаправление с новыми данными '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обратный вызов или, может быть, блокирующий вызов, ожидающий завершения события?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Спасибо за все ваши ответы.На самом деле мне нужно было поместить событие socket.on в app.post следующим образом.

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

Обещания также были хорошим предложением, и еще раз спасибо за все ваши ответы

0 голосов
/ 02 января 2019

Добавить 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("/");
  });
});
...