Javascript Mongoose未使用Wait和try/catch块保存模型

Javascript Mongoose未使用Wait和try/catch块保存模型,javascript,mongodb,mongoose,socket.io,Javascript,Mongodb,Mongoose,Socket.io,我创建了一个具有正确属性的游戏模型,并尝试在try/catch块中使用wait保存它,但它不保存,也不捕获错误 socket.on('create-game',async (nickName)=>{ try{ const quotableData = await QuotableAPI(); let game = new Game(); game.words = quotableData;

我创建了一个具有正确属性的游戏模型,并尝试在try/catch块中使用wait保存它,但它不保存,也不捕获错误

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);     
        }
    });
如果我去掉wait,它会工作(上面的代码),但是稍后在我的代码(如下所示)中,当我尝试使用game.findbyId()方法查找带有id的特定游戏时,我无法找到它

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解决了所有问题。我很难过我花了~天的时间来调试它。

findbyid方法只适用于objectId,它将在保存文档时由MongoDB自动创建。如果您使用的是自定义creteria,您必须使用
find
方法。

查看游戏类定义(这是您编写的吗?)可能会很有用。至少是
save
methodforMongoose,当您创建模式时,您是否应该创建自己的save方法?不知道,所以您的游戏类扩展了一些mongoose类?很抱歉,我看到了edit Now,根据我的解释,mongoose是一个库,允许您创建模型,您可以在其中创建模型实例,并将它们添加/查询/删除/到数据库中。当我安装MongoDB时,一切都开始工作。在我观看的教程中,此人没有安装MongoDB,因此我想知道如果您正在使用mongoose,您是否需要安装。可能是此人已经安装了MongoDB,或者此人正在使用类似MongoDB atals的远程实例。Mongoose是一个帮助你连接数据库的库,它不是数据库本身。你能把我们也链接到教程吗?是的,他们根本没有提到MongoDB。以下是链接:如视频7:04所示。此人正在连接到mongodb的“本地”实例。连接url为'mongodb://localhost:27017/typeracertutorial'. 此处的localhost表示此人已在本地安装mongodb。如果此人没有提到如何安装mongodb,您可以在youtube上找到许多关于它的教程。例如,这里的这一个:适用于mac,这里的这一个适用于windows