2013-10-14 11 views
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 
+0

console.log (결과)의 출력 내용은 무엇입니까? – thtsigma

답변

2

results 그래서, 당신의 if 일치하는 사용자를 찾을 수없는 길이가 0 인 배열 될 것입니다 콜백을 체크인하면 다음과 같이 표시되어야합니다.

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

이 유스 케이스에 더 적합하므로 더 간단한 코드가되므로이 유형의 쿼리에는 find 대신 findOne을 사용해야합니다.

관련 문제