Я пытаюсь использовать io.sockets.on внутри маршрута в приложении Node.js и Express. Я следовал тому, что здесь сказано: https://stackoverflow.com/a/31277123/8271839
Я могу успешно отправлять события io.sockets.emit, но не могу получать события с io.sockets.on.
Вот мой код:
index.js:
const cors = require('cors');
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const taskRequest = require('./routes/taskRequest');
app.use(cors())
app.use(express.json());
app.use('/api/taskRequest', taskRequest);
app.set('socketio', io);
server.listen(4002);
io.sockets.on("connection",function(socket){
console.log("connected");
socket.on("connected", function (data) {
console.log("hello");
})
});
маршруты / taskRequest.js:
const express = require('express');
const router = express.Router();
router.post('/', async (req, res) => {
var io = req.app.get('socketio');
//pickedUser is one of the connected client
var pickedUser = "JZLpeA4pBECwbc5IAAAA";
//we only send the emit event to the pickedUser
io.to(pickedUser).emit('taskRequest', req.body);
io.on('connection', function (socket) {
console.log('connected 2');
socket.on('taskResponse', function () {
console.log('hello 2');
});
});
});
module.exports = router;
Когда клиент подключен, я получаю сообщение «подключено» в консоли, но не сообщение «подключено 2».
Кроме того, когда клиент отправляет сообщение «подключен», я получаю «hello» в консоли, но когда клиент отправляет сообщение «taskResponse», я не получаю «hello 2» в консоли.
Хотя при вызове io.to(pickedUser).emit('taskRequest', req.body);
он работает, клиент получает сообщение «taskRequest».
Почему .emit () работает внутри моего маршрута, а не .on ()?