【发布时间】:2020-09-26 01:43:23
【问题描述】:
我创建了一个具有正确属性的游戏模型,并尝试在 try/catch 块中使用 await 保存它,但它没有保存也没有捕获错误。
socket.on('create-game',async (nickName)=>{
try{
const quotableData = await QuotableAPI();
let game = new Game();
game.words = quotableData;
let player = {
socketID : socket.id,
isPartyLeader : true,
nickName
}
game.players.push(player);
game = await game.save();
const gameID = game._id.toString();
socket.join(gameID);
io.to(gameID).emit('updateGame',game);
} catch (err) {
console.log(err);
}
});
如果我拿走 await,它会起作用(上面的代码),但是稍后在我的代码中(如下所示),当我尝试使用Game.findbyId() 方法,我找不到。
socket.on('join-game',async ({gameID : _id,nickName})=>{
try{
let game = await Game.findById(_id);
if(game.isOpen){
const gameID = game._id.toString();
socket.join(gameID);
let player = {
socketID : socket.id,
nickName
}
game.players.push(player);
game = await game.save();
io.to(gameID).emit('updateGame',game);
}
}catch(err){
console.log(err);
}
});
编辑:我正在关注一个教程,他们没有编写自己的 save() 函数,所以我认为它在创建模型时已经实现。
const mongoose = require('mongoose');
const PlayerSchema = new mongoose.Schema({
currentWordIndex : {
type: Number,
default : 0
},
socketID : {type : String},
isPartyLeader : {type : Boolean,default : false},
WPM : {type : Number, default: -1},
nickName : {type : String}
});
const GameSchema = new mongoose.Schema({
words : [{type : String}],
isOpen : {type : Boolean,default : true},
isOver : {type : Boolean,default : false},
players : [PlayerSchema],
startTime : {type : Number}
});
module.exports = mongoose.model('Game',GameSchema);
编辑 2:安装 MongoDB 解决了所有问题。我很伤心,我花了 ~ 一天的时间来调试它。
【问题讨论】:
-
查看 Game 类定义(这是你写的吗?)至少
save方法可能很有用 -
对于猫鼬,当你创建一个模式时你应该创建自己的保存方法吗?
-
不知道,所以你的游戏类扩展了一些猫鼬类?抱歉,我现在看到了修改
-
从我的解释来看,猫鼬是一个库,它允许您创建模型,您可以在其中创建模型实例并将它们添加/查询/删除/到您的数据库中。
标签: javascript mongodb mongoose socket.io