Node.js CastError:值“0”的转换为ObjectId失败&引用;在路径上“_id";对于“型号”;“公司”;

Node.js CastError:值“0”的转换为ObjectId失败&引用;在路径上“_id";对于“型号”;“公司”;,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在为一个项目使用一个样例MongoDB数据库,在使用findById mongoose方法时,我得到一个错误:“CastError:Cast to ObjectId在模型“Company”的路径“\u id”处的值“…”失败。我使用车把作为查看引擎 中间件文件: getCompanyData: async (req, res, next) => { // Queries const information = "name ipo founded_

我正在为一个项目使用一个样例MongoDB数据库,在使用findById mongoose方法时,我得到一个错误:“CastError:Cast to ObjectId在模型“Company”的路径“\u id”处的值“…”失败。我使用车把作为查看引擎

中间件文件:

getCompanyData: async (req, res, next) => {
    // Queries
    const information =
      "name ipo founded_day founded_month founded_year description overview relationships";
    // try {
      const getCompanyData = await Companies.findById(req.params.id, information).exec();
      console.log(getCompanyData);
      // Coverting Mongoose Document to Object
      const companyData = getCompanyData.toObject()
      // console.log(companyData); 
这是路由文件

// Company Route
router.get('/list/:id', getCompanyData, (req, res) => {
  // console.log(req.companyData.name);
  res.render('company', {
    comapany: req.companyData
  })
})


如果你遇到的是和我之前遇到的相同的事情…这是由你的路线代码顺序造成的。确保在您放置的路线上使用参数

// Company Route
router.get('/list/:id', getCompanyData, (req, res) => {
  // console.log(req.companyData.name);
  res.render('company', {
    company: req.companyData
  })
})

一直到代码的底部…因为假设您有另一个路由/列表/配置文件…它会给您这个错误,因为配置文件不是objectId。

为什么要在findById()中传递变量
信息
,我认为您不能这样做。顺便说一句,您试图实现什么?他试图使用第二个参数作为字符串从结果中获取一些选择性字段。请console.log(req.params.id)并尝试将其类型转换为object id.id=mongoose.Types.ObjectId(req.params.id)