mongoose 我在Node.JS中的GET请求收到500内部服务器错误

rqmkfv5c  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(91)

我试图通过在recipeID中附加usersID来显示用户保存的食谱。当我发出GET请求时。我得到的是一个没有属性的空对象。这段代码到底是怎么回事?
以下是保存的食谱路线:

router.get('/savedRecipes/ids/:userID', async (req, res) => {

    const {userID} = req.params
    try {
        const user = await UserModel.findById(mongoose.Types.ObjectId(userID));
        res.status(201).json({ savedRecipes: user?.savedRecipes });
      } catch (err) {
        console.log(err);
        res.status(500).json(err);
      }
})

router.get('/savedRecipes/:userID', async (req, res) => {

    const {userID} = req.params

    try {
        const user = await UserModel.findById(mongoose.Types.ObjectId(userID));
        
        const savedRecipes = await RecipeModel.find({
          _id: { $in: user.savedRecipes },
        });
    
        console.log(savedRecipes);
        res.status(201).json({ savedRecipes });
      } catch (err) {
        console.log(err);
        res.status(500).json(err);
      }
})

字符串

8fq7wneg

8fq7wneg1#

不需要写UserModel.findById(mongoose.Types.ObjectId(userID)),只需要写UserModel.findById(userID)
我假设“savedRecipes”是一个“Recipe _ids”数组,就像["64aaea3d0ce4282f14604767", "64aaea3d0ce4282f1460476s"] this,
所以问题就在这里

const savedRecipes = await RecipeModel.find({
      _id: { $in: user.savedRecipes },
});

字符串
这里的_id是Mongoose ObjectId,user.savedRecipes是一个Array of Strings
您不能将StringsMongoose ObjectID进行比较。因此将recipe _ids保存为“savedRecipes”Array中的Mongoose ObjectID
要将id保存为Mongoose ObjectId,请像这样更改Schema:

const UserSchema = new mongoose.Schema({
     //...
     savedRecipes: [mongoose.Types.ObjectId]
})


或者在将其保存到savedRecipe数组时使用new mongoose.Types.ObjectId(recipeID)

相关问题