【问题标题】:mongoose push doesnt work inside socket.io callmongoose push 在 socket.io 调用中不起作用
【发布时间】:2012-02-07 22:18:48
【问题描述】:

出于某种原因,推送到 mongodb 可以使用此设置

// 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);

    });
});

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

像这样:

// 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});

    });
});

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

【问题讨论】:

  • 您如何检查story.lines.push 是否有效?这里缺少很多代码。
  • 我只是粘贴了一段代码以保持简洁。我确实拥有上面架构的所有代码。我已经在 socket.io 调用之外测试了 story.push 并且数据成功存储到了 MongoDB - 这能回答你的问题吗?
  • 您可能在并发方面遇到了问题,但是如果没有看到完整的代码就无法判断。尝试运行您的代码,然后通过 mongo 控制台检查数据库。你在story 上给.save() 打电话吗?
  • 这里是GitHub上完整代码的链接:github.com/eemouk/Storify/blob/master/story.js

标签: node.js mongodb socket.io mongoose


【解决方案1】:

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

【讨论】:

  • 这几乎是我一直在尝试做的事情,但我认为我没有正确实施。以下是 GitHub 上的完整代码:github.com/eemouk/Storify/blob/master/story.js
  • 推送没有回调。它是数组的内置操作。只需在推送后进行保存,而不是在回调中(它不存在)。
  • 我以前试过。问题是,代码会直接迭代以保存,而无需等待从 Socket on 事件接收到数据。这样做的结果是它没有从客户端捕获任何数据。我该如何解决这个问题?
  • 您将在文件末尾终止数据库连接,您不想在那里这样做。如上所述,我还将您的保存功能正确放置在推送下方。给你:gist.github.com/1774024
  • 好的 - 谢谢。让我试试这个并向你报告。
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2017-09-03
  • 2016-02-26
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
相关资源
最近更新 更多