如何处理 Angular 和 mongoose 之间的 mongodb id?

问题描述 投票:0回答:1

由于 Typescript 的强类型,我将 Mongodb 的 _id 作为 Angular 中的字符串传递。示例:

public setSelectedProduct = async (productId: string) => {...}

当我将productId传递到后端并尝试在Node.js中使用Mongoose访问Mongodb时,它告诉我productId不是有效的Mongodb id。

exports.getProduct = async (req, res) => {
  console.log('req.params.productId', req.params.productId)
  const productId = req.params.productId;

  // const productId = new    mongoose.Types.ObjectId(Number(req.params.productId));


  try {
   const product = await Product.findOne({_id: productId})
    console.log('product', product);
    // res.status(200).json(product);
  } catch(error) {
    console.error(error);
    res.status(500).send("Problem getting selected product.");
  }
}

CastError:对于模型“Product”的路径“_id”处的值“67420003204128e379f42946”(类型字符串),转换为 ObjectId 失败

我尝试使用以下方法从字符串转换为 ObjectId:

 const productId = new mongoose.Types.ObjectId(Number(req.params.productId));

但现有关联产品不予退回。

我该如何处理?

node.js angular mongodb
1个回答
0
投票

在具体执行查询之前,Mongoose 有一个方法来检查传递的 ObjectId 是否有效。另一点经常有用的是使用 Mongoose 自己的方法执行转换:mongoose.Types.ObjectId("")。

© www.soinside.com 2019 - 2024. All rights reserved.