Mongoose不能在socket.io调用中保存()
这是我的设置:
app.js
io.on('connection', function(socket) { socket.on('game-save-comment', function(data) { var result = require('./sockets/games.js')(data); if (result) { socket.emit('comment-ok'); } else { socket.emit('comment-not-ok'); } }); });
./sockets/games.js
var Game = require('mongoose').model('Game'); module.exports = function(data) { var gid = data.gid; var index = data.move; var comment = data.comment; return game = Game.findOne({gid: gid}, function(err, game) { if (!game || err) { return result = false; } else { game.comments[index] = comment; return result = game.save(function(err) { if (err) { return false; } else { return true; } }); } }); }
我想我可能会遇到某种竞争状况 – 但我不确定。 我已经把console.log
消息放在了这个代码的不同位置,并且触发了它。 stream进入save()
函数,并一直返回true
…但文档永远不会在数据库中得到更新。
难道我做错了什么? 我想要做的就是更新指定索引处的comments
数组。
你没有正确的代码,你需要添加callback到导出的函数参数,并保存完成后调用callback。 像这样的东西:
var Game = require('mongoose').model('Game'); module.exports = function(data, cb) { var gid = data.gid; var index = data.move; var comment = data.comment; Game.findOne({gid: gid}, function(err, game) { if (!game || err) { cb(err || "Game not found"); } else { game.comments[index] = comment; game.save(cb); } }); }
和这里:
var games = require('./sockets/games.js'); games(data, function (err) { if (err) { socket.emit('comment-not-ok'); } else { socket.emit('comment-ok'); } });
- nodejs:mysql无法访问连接查询callback中的全局variables
- apr_socket_recv:通过对端重置的连接(104)nodejs Ubuntu 14.10 x64 8GB RAM 4核心(VPS)
- 如何从不同的主机连接到socket.io服务器?
- 通过套接字客户端返回variables
- nodejs中是否有一种“Socket连接池”?
- 节点JS + Socket.io应用程序在一段时间后停止接收事件
- 使用socket.io发送实时分析的最佳方法
- 如何closuresAngular 2/4 +和Socket.io中的websocket
- Android的/套接字 – 如何从主UI线程发送信息到套接字线程?