关于node.js:mongoose push在socket.io调用中不起作用

mongoose push doesnt work inside socket.io call

由于某些原因,推送到mongodb可以与此设置一起使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Fixed params
story.title = 'Socketi';
story.lines.push ({ author: 'Khuram', text:'socket data'});


//Capture data from socket into schema
 io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });

socket.on('slog', function (data) {

console.log(data);

    });
});

但是将猫鼬push语句放在socket.io调用中不起作用

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Fixed params
story.title = 'Socketi';



  //Capture data from socket into schema
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });

socket.on('slog', function (data) {

story.lines.push ({ author: 'Khuram', text:data.my});

    });
});

仅供参考:" slog"是指我希望猫鼬更新的事件。
我从客户端接收数据,我想在每次发出此事件时将套接字事件数据推送到mongodb(这就是为什么我想将其放入socket.io调用中)的原因

  • 您如何检查story.lines.push是否有效?这里缺少很多代码。
  • 我只是粘贴了一部分代码以使其简洁。我确实有上面模式的所有代码。我已经在socket.io调用之外测试了story.push,并将数据成功存储到MongoDB中-这能回答您的问题吗?
  • 您可能在并发方面遇到了麻烦,但是如果看不到完整的代码就无法分辨。尝试运行您的代码,然后通过mongo控制台检查数据库。您要在story上呼叫.save()吗?
  • 这是GitHub上完整代码的链接:github.com/eemouk/Storify/blob/master/story.js
  • 试试这个:gist.github.com/ca3f8927b6a6cbdd3039
  • 这行得通。谢谢你。由于您和@idefine的答案都是正确的,因此我不知道该将谁标记为正确答案,但是当他将其发布为答案时,我标记了他的正确答案并支持您的评论。希望没事吗?如果还有其他我可以为您做的事情,您会得到更好的回报,那么请告诉我?也感谢您观看我的存储库。


您的保存功能在哪里执行?我建议您在回调中收到一条slog消息时,将所有可能发生的事情放在所有逻辑上,然后在回调中也调用Story实例上的save。

  • 那几乎就是我一直在尝试做的事情,但是我不认为即时实施正确。这是GitHub上的完整代码:github.com/eemouk/Storify/blob/master/story.js
  • 没有用于推送的回调。它是数组的内置操作。只需在执行推送后执行保存,而不要在回调中进行操作(该保存不存在)。
  • 我以前尝试过。问题是,代码反复进行遍历以保存,而无需等待从Socket on事件接收到数据。其结果是它不会捕获来自客户端的任何数据。我该如何解决这个问题?
  • 您要在文件末尾终止数据库连接,而您不想在那做。如上所述,我也将您的保存功能正确放置在下推位置。在这里,您可以前往:gist.github.com/1774024
  • 好,谢谢。让我尝试一下并向您报告。
  • 仅供参考,我更新了要点,以删除用于连接到mongodb的端口号(1337)。