【发布时间】:2021-07-30 08:44:23
【问题描述】:
我正在使用 React 和 Node.js 构建一个消息传递应用程序。数据被建模并存储在 MongoDb 中。我正在使用猫鼬进行数据库连接。我成功地能够在 api 调用 (/getChannels) 上显示数据。
app.get("/api/getChannels",cors(corsOptions), async (req,res,next) => {
let try_channels = await Chat.find((c) => {
return c
});
res.send({
channels: try_channels
});
})
但我想在单击任何所需通道时来自客户端的套接字事件(“通道连接”)上更新 mongoDB 中特定通道的数据。
const handleSelect = (id) => {
let selected_channel = channels.find((c) => {
return c. id === id
})
setChannel(selected_channel)
socket.emit("channel-join", id, ack => {
});
};
在服务器端,我正在监听事件并想更新 mongodb 中的数据以显示我已加入特定频道。我可以通过以下逻辑在 server.js 文件中包含一组通道来做到这一点
socket.on('channel-join',id =>{
console.log('channel-join',id)
STATIC_CHANNELS.forEach(c => {
if (c.id === id) {
if (c.sockets.indexOf(socket.id) == (-1) ) {
console.log(socket.id)
c.sockets.push(socket.id);
c.participants++;
console.log(c.sockets,c.participants)
io.emit('channel' , c)
}
}else {
let index = c.sockets.indexOf(socket.id);
console.log(index)
if (index != (-1) ) {
c.sockets.splice(index , 1)
c.participants--;
console.log(c.sockets,c.participants);
io.emit('channel',c);
}
}
})
})
但我无法让它为 mongodb 中的数据工作。我应该先将所有数据提取到数组然后使用它吗?但这会首先取消使用数据库的意义,不是吗? 我应该做类似 mongoose_model.findAndUpdate() 的事情吗?这行得通吗??
【问题讨论】:
标签: node.js reactjs mongodb mongoose create-react-app