2013-10-14 114 views
0

我正在做一個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 
+0

console.log(結果)的輸出是什麼。 – thtsigma

回答

2

results會當匹配的用戶沒有找到一個長度爲0的數組,所以你if檢查回調需要看起來像這樣:

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

對於這種類型的查詢,您應該使用findOne而不是find,因爲它更適合此用例,並且會導致更簡單的代碼。