Node.js 如何使用socket.io从控制器函数发出?
我正在构建我的第一个MERN应用程序[留言板],并尝试使用socket.io添加邮件通知 到目前为止,我在server.js中有:Node.js 如何使用socket.io从控制器函数发出?,node.js,sockets,socket.io,mern,Node.js,Sockets,Socket.io,Mern,我正在构建我的第一个MERN应用程序[留言板],并尝试使用socket.io添加邮件通知 到目前为止,我在server.js中有: const io = socketio(expressServer); const connectedUsers = {}; io.on('connection', (socket) => { socket.emit('messageFromServer', { data: 'Welcome to the server' }); socket.on(
const io = socketio(expressServer);
const connectedUsers = {};
io.on('connection', (socket) => {
socket.emit('messageFromServer', { data: 'Welcome to the server' });
socket.on('messageToServer', (dataFromClient) => {
connectedUsers[dataFromClient.username] = socket;
});
});
要从控制器文件发射,我需要io对象还是只需要套接字,以及如何与控制器文件共享它/它们
非常感谢大家的帮助 为您的用户跟踪设置一个外部文件
connectedUsers.js
,以避免
服务器设置:
const { connectedUsers } = require('./connectedUsers')
io.on('connection', (socket) => {
socket.on('messageToServer', (dataFromClient) => {
connectedUsers[dataFromClient.username] = socket;
});
});
下一个问题是将io
实例获取到路由器/控制器。我通常会在服务器设置中进行此操作
app.io = io
然后在路由器/控制器中,您可以从req
对象访问io
实例:
const { connectedUsers } = require('./connectedUsers')
router.post('/message', function(req,res){
if ( connectedUsers[req.body.username] && connectedUsers[req.body.username].id) {
const id = connectedUsers[req.body.username].id
req.app.io.to(id).emit({ msg: 'blah' })
}
})
上面的
if
复选框是一个代码示例,在您使用connectedUsers
的任何地方都会弹出该代码。这个简单的对象通常会变成一个单例类ConnectedUsers{}
实例,这样就可以附加公共代码,而不是将其散落在整个控制器中。您所说的来自我的控制器是什么意思?您正在尝试将http get/post请求链接到web套接字吗?是的,对于相关通知:)具体来说,我想在其他用户向用户发送私人消息时向用户发送通知。抱歉,这应该是套接字断开连接事件导出/请求问题可能是一个循环依赖项。您包括来自服务器的控制器和来自控制器的服务器。感谢您的帮助!我会检查一切是否正常,然后告诉你。没问题。我记得我的头撞了这个!
const { connectedUsers } = require('./connectedUsers')
router.post('/message', function(req,res){
if ( connectedUsers[req.body.username] && connectedUsers[req.body.username].id) {
const id = connectedUsers[req.body.username].id
req.app.io.to(id).emit({ msg: 'blah' })
}
})