【发布时间】:2019-10-09 23:58:36
【问题描述】:
我正在尝试在 Node.js 和 Express 应用程序的路由中使用 io.sockets.on。我一直在关注这里所说的: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() ?
【问题讨论】:
标签: javascript node.js express socket.io routes