首页 > 解决方案 > 如何使用使用 mongodb 的用户向特定用户发出通知

问题描述

我一直在尝试只向一个用户发出通知。

我发出了一个 http post 请求,将通知的详细信息发送到后端,以便我可以将其存储在我的 Mongodb 数据库中,然后我监听数据库中的任何更改或任何未读消息,然后我使用套接字将其发送到前端.io。

每个通知模式都有一个接收者(接收消息的人),我使用注册时生成的他/她的用户 ID 保存了接收者。

现在我想检查每个通知并使用他的用户 ID 仅向接收者发出每个通知。我被困在尝试向特定用户发出信号,因为用户重新加载页面后 socket.id 发生了变化。

请帮助我我的前端代码

    this.socket = io(this.url, {
      extraHeaders: {
        'Authorization': token
      },
      query: {token: user },
      
    });
    this.socket.on('unread', (res) => {
      this.subject.next(res.unread); 
});

我的 Node.js socket.io 代码

 io.on('connection', (socket) => {
      // socket.on('userConnected',(userId) => {
        console.log('user connected to socket');
        sockets.add(socket);
        console.log(`Connected sockets: ${sockets.size}`);
         messageCtrl.isUnreadMsg()
         .then(value => {
            console.log("got unread = " + value);
            
            for (const s of sockets) {
               // value.receiver = usersId
               console.log(value.receiver);
                console.log(`Emitting unread to sockets: ${value}`);
                s.emit('unread', { unread: value });
           }  
        }) 

我的控制器代码

exports.isUnreadMsg = (req, res) => {
   // var user = req.user
    //console.log(user);
    return Message.find({ 'read': 'false' })
   // .find({receiver: socket.decoded.user._id}) // tried using this but it didnt work
        .then(cnt => {
            console.log("unread messages count = " + cnt);
            isUnread = cnt;
            console.log("returning unread = " + isUnread);
            return isUnread;
        }).catch(err => {
            console.log(err.message || "Some error occurred while retrieving Messages.");
            return isUnread;
        });
};

谢谢

标签: node.jsangularmongoosewebsocketsocket.io

解决方案


推荐阅读