node.js - 如何使用使用 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;
});
};
谢谢
解决方案
推荐阅读
- jenkins - 即使主节点空闲,Jenkins 作业也总是与从节点排队
- algorithm - 检查名称是否在可能单词列表中的最有效方法是什么?
- python - FileChooserDialog 在函数退出之前不会关闭。- 蟒蛇GTK
- erlang - Dialyzer 警告 no_exit 构建不良记录 - 这是一个错误吗?
- java - 注册表仅在用户已登录时才有效
- lua - Lua 中的这个“选择”函数总是返回 nil
- algorithm - 如何编写一个算法来交换两个变量而不创建第三个变量?
- python - Disocrd.py 命令
- eclipse - “Eclipse XSL 开发人员工具”支持 XSLT 3.0 和 XPath 3.1
- ios - 在 ios AVPlayer 中切换 HLS 流的比特率