开发问题跟踪器遇读取null的project_issue_tracker属性TypeError报错求解
错误原因
- 该报错的本质是代码尝试访问
null类型值的project_issue_tracker属性,结合你当前的业务场景,几乎都是Mongoose查询项目文档时未匹配到对应数据,返回结果为null,且代码没有做非空校验直接访问属性导致的。 - 常见触发场景:
- 传入的查询参数(项目名、项目ID)和数据库中存储的实际数据不匹配,没有找到对应项目
- 数据库连接异常,查询未正常执行返回了空值
- 异步查询逻辑处理错误,还没拿到查询结果就提前访问了对应属性
解决方法
- 优先添加查询结果非空校验
拿到项目查询结果后先判断是否存在,不存在直接返回错误,不要执行后续属性访问逻辑,参考示例:
// async/await 写法示例 const targetProject = await Project.findOne({ project_name: req.query.project_name }); // 非空拦截 if (!targetProject) { return res.status(404).json({ error: '项目不存在' }); } // 确认存在后再访问对应字段 const issueList = targetProject.project_issue_tracker;
- 校验查询参数正确性
打印传入查询方法的参数值,和数据库内存储的项目数据做对比,确认参数的拼写、大小写、数据类型完全匹配,若用ID查询需确认参数是合法的ObjectId格式。 - 确认数据库连接状态
检查Mongoose连接日志,确认数据库连接正常,无断连、权限不足等问题,避免查询未正常执行返回空值。 - 可选优化:给Schema字段设置默认值
避免新建项目无issue时出现非预期空值,调整Schema写法:
const projectSchema = new mongoose.Schema({ project_name: String, project_issue_tracker: { type: [issueSchema], default: [] } });
内容的提问来源于stack exchange,提问作者Gros22
相关产品推荐
相关产品推荐

