MongoDB调用findById时报Cannot read properties of undefined错误如何解决
问题根因排查
- 变量覆盖问题
你在函数开头声明了局部变量let Customer,初始值为undefined,完全覆盖了外层你提前定义好的Mongoose Customer模型。调用undefined的findById方法就会触发你收到的报错。你需要先在文件顶部引入已经定义好的Customer模型,不要在该中间件函数内重复声明同名局部变量。
- 变量覆盖问题
- 参数语法错误
Customer.findById(req.params,id)这里的逗号属于语法错误,你实际想要获取的是路径参数中的id,正确写法应该是req.params.id,当前的写法相当于给findById传入了两个不相关的参数,即使修复了第一个问题也无法正确查询数据。
- 参数语法错误
修正后的代码示例
// 首先要确保你已经在文件顶部引入了提前定义好的Customer模型,类似: // const Customer = require('../models/customer') async function getCustomer(req, res, next) { let customer try { // 修复两个错误:用外层的Customer模型,正确获取req.params.id customer = await Customer.findById(req.params.id) if (customer == null) { return res.status(404).json({ message: 'Cannot find Customer' }) } } catch (err) { return res.status(500).json({ message: err.message }) } res.customer = customer next() }
注:这里把查询结果的变量名改成小写customer,避免和模型名Customer重名,降低变量混淆的概率
内容的提问来源于stack exchange,提问作者Cherif Farah
相关产品推荐
相关产品推荐

