You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js操作MongoDB查询报错:无法读取null的password属性

问题根因

报错TypeError: Cannot read property 'password' of null的直接原因是admins.findOne(query)没有匹配到任何文档,返回了null,直接对null取password属性就触发了类型错误。

常见触发场景
  • 传入函数的username参数和数据库中存储的username值不完全匹配:存在大小写差异、前后夹带不可见空格、拼写错误
  • admins集合对象指向错误:虽然数据库连接正常,但绑定的不是存储管理员账号的目标库/目标集合
  • 异常捕获逻辑位置错误:把await admins.findOne(query)写在了try块外面,查询阶段抛出的异常不会被捕获,只会在读取null属性时触发报错,容易误导排查方向。
修正代码
async function getAdminPassword(username) {
    const query = { username: username }
    try {
        // 把数据库查询操作放进try块,才能捕获查询阶段的异常
        const user = await admins.findOne(query);
        // 先判断查询结果是否存在,再读取属性
        if (!user) {
            console.log(`未匹配到用户名为【${username}】的管理员账号`);
            return null;
        }
        return user.password
    }
    catch (err) {
        console.log('管理员账号查询异常:', err);
        return null;
    }
}
排查步骤
  • 先在函数入口打印传入的username参数,确认值和数据库中存储的账号名完全一致,无格式问题
  • 写死查询条件做测试:执行await admins.findOne({username: 'isaiah'})打印结果,确认admins集合确实能查到目标管理员文档,排除连错库、选错集合的问题
  • 若写死条件能查到结果,就说明是动态传入的username参数值存在问题,逐行校验参数传递链路即可。

数据库内容参考截图

内容的提问来源于stack exchange,提问作者isaiah day

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:06:26