【问题标题】:Mongoose can't save() in socket.io callMongoose 无法在 socket.io 调用中保存()
【发布时间】:2015-12-25 00:59:45
【问题描述】:

这是我的设置:

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 消息放在此代码的不同位置并触发它。流程进入save() 函数并一直返回true ...但是文档永远不会在数据库中更新。

我做错了吗?我要做的就是更新指定索引处的comments 数组。

【问题讨论】:

标签: node.js mongodb sockets mongoose


【解决方案1】:

您的代码不正确,您需要在导出的函数参数中添加回调,并在保存完成后调用回调。类似的东西:

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

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2016-01-11
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多