SocketIO отправить сообщение клиенту по маршруту API

#node.js #express #socket.io

#node.js #экспресс #socket.io

Вопрос:

В моем express API есть маршрут, по которому я хочу отправлять сообщения клиенту с помощью websocket. В этом случае клиент является другим Node.js приложение. В этом Node.js приложение, я пытаюсь подключиться к сокету и распечатать полученные сообщения. И API, и приложение узла находятся на разных портах. Может кто-нибудь помочь мне сделать эту работу?

Вот как я передаю свой сокет своим экспресс-маршрутам:

 const server = app.listen(PORT, () => {
    console.log(`Server on port ${PORT}`);
});

const io = require("socket.io")(server);
app.set("socketio", io);
 

Вот мой маршрут REST API:

 exports.getAll = function(req,res){
    var io = req.app.get('socketio');
    io.emit('hi!');
}
 

Вот мой клиент ввода-вывода сокета, он использует socket.io-client

 const socket = io('http://localhost:3000');

socket.on("message", data => {
    console.log(data);
});
 

К сожалению, я не получаю сообщение «привет» от моего API.

Когда я звоню /api/getAll , я не получаю сообщение в своем клиентском приложении.

Ответ №1:

При отправке события через socket.io вас вы определяете имя события перед данными.
Пример:

 exports.getAll = function(req, res){
    var io = req.app.get("socketio");
    io.emit("message", "hi!");
}
 

Теперь вы сможете получать message событие от клиента.

Ссылка: