0

mongo コレクションのクエリを実行していますが、オブジェクトが明らかに未定義であるため、アクセスしようとしているプロパティを利用できません。コールバックを使用しているので、null オブジェクトにアクセスしようとしている理由がわかりません。

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
4

1 に答える 1

2

results一致するユーザーが見つからない場合は長さ 0 の配列になるためif、コールバックでのチェックは代わりに次のようにする必要があります。

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

findOneこのタイプのクエリの代わりにfor を使用する必要がfindあります。これは、このユース ケースにより適していて、コードがより単純になるためです。

于 2013-10-14T14:10:53.677 に答える