gpt4 book ai didi

node.js - Mongoose 无法在 socket.io 调用中 save()

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:45 25 4
gpt4 key购买 nike

这是我的设置:

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 数组。

最佳答案

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

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

关于node.js - Mongoose 无法在 socket.io 调用中 save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com