无法读取未定义的对象

Undefined object cannot be read

本文关键字:对象 未定义 读取      更新时间:2023-09-26

我正在查询一个 mongo 集合,我尝试访问的属性不可用,因为该对象显然未定义。我正在使用回调,所以我不确定为什么它试图访问空对象?

exports.checkPermissions = function(uname, pw){
    var MongoClient = require('mongodb').MongoClient,
        format = require('util').format;
    console.log(uname + ", " + pw);
    MongoClient.connect('mongodb://localhost/users', function(err, udb) {
        if(err) throw err;
        var targetcol = udb.collection('profiles');
        targetcol.find({username: uname, password: pw}, {permissions: 1}).toArray(function(err, results) {
            if( err || !results){
                console.log("error occured");
                response.redirect('/');
            }
            else {
                if (results[0].permissions == 'system admin'){
                    response.redirect('/adminDashboard');
                }
                else
                    response.redirect('/userDashboard');
            }
            udb.close();
        });
    });
}

我收到错误的部分是:

if (results[0].permissions == 'system admin')

events.js:72
        throw er; // Unhandled 'error' event
              ^
TypeError: Cannot read property 'permissions' of undefined

当找不到匹配的用户时,results将是一个长度为 0 的数组,因此您的if在回调中的签入需要如下所示:

if( err || !results.length){
    ...

对于这种类型的查询,您可能应该使用 findOne 而不是 find,因为它更适合此用例,并且会产生更简单的代码。