как заставить express маршрут на сервере ждать, пока он не получит сообщение сокета io от другого nodejs процесса, прежде чем возвращать ответ клиенту? - PullRequest
0 голосов
/ 06 мая 2020

Как сделать так, чтобы маршрут express на моем сервере (который также является сервером socket io) ждал, пока он не получит сообщение socket io от другого процесса nodejs (клиента socket io) перед завершением?

Это так, после того, как все logi c выполнены, я могу отправить информацию, поступающую от клиента, в качестве объекта ответа из маршрута express.

В моей текущей реализации нет возможности создать событие обработчик внутри маршрута POST express для получения ссылки, поступающей от другого процесса nodejs.

app.post('/api/upload/:userId', upload.any(),(request, response) => {


fs.writeFile('/tmp/example.txt' , err => {


/* extraneous logic */


//send socketio to start the logic in the other nodejs process

io.sockets.emit('start', obj)


///...... Wait

//catch 'done' event from other nodejs process

//here, OBJ sent with a link


return response.status(200).send(JSON.stringify(objWithLink))

})

})

Процесс другого узла


socket.on('connect' , callback{

socket.on('start') ... do more logic callbacks{


/*extraneous logic */

socket.emit('done', objWithLink)

})


1 Ответ

0 голосов
/ 06 мая 2020

Вы должны использовать ack. ack - последний параметр в emit и его обратный вызов - да, верно, вы можете отправить функцию через сокет. Это должно выглядеть так:

app.post('/api/upload/:userId', upload.any(),(request, response) => {
  fs.writeFile('/tmp/example.txt' , err => {
    /* extraneous logic */
    //send socketio to start the logic in the other nodejs process

    io.sockets.emit('start', obj, (objWithLink) => {
      // this is executing when the other process call callback()
     response.status(200).send(JSON.stringify(objWithLink))
    });
  });
});

А в другом процессе:

socket.on('connect' , _ => {
  socket.on('start', (object, callback) => {
    // do some logic here, after all call callback
    callback(objectWithLink);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...