2012-10-13 41 views
5

我有一個findOne查詢,並且當我驗證它是否返回一個空文檔時,我會拋出一個錯誤,說'無法讀取屬性'用戶名'空值'。當我嘗試接取doc.username在如果(doc.username!)這happend {Node.js和mongoose(mongodb)錯誤無法讀取屬性null'

我的代碼:

function checkAccDb(username, password) { console.log(2); 
    /* Check if accounts exists in db */ 
    db.findOne({username: username}, function(err, doc){ console.log(3); 
     if(err) throw err; 

     if(!doc.username) { 
      add2stack(username, password); 
     } 
     else if(doc.status == 200) { 
      end(username, password, 1000); 
     } 
     else if(doc.status == 401) { 
      if(doc.password == password) 
       end(username, password, 401); 
      else 
       add2stack(username, password); 
     } 
     else { 
      add2stack(username, password); 
     } 
    }); 
} 

誰能請解釋我這裏發生了什麼?

謝謝!

+0

你得到的錯誤是哪一行? –

回答

9

查詢成功但找不到任何匹配,因此errdoc都爲空。您需要檢查doc是否爲空並適當地處理該情況。

0

典型的實現會是這樣

db.findOne({username: username},function(err, doc) { 
    if (err) { 
    // handle error 
    } 
    if(doc != null) 
    { 
    if(!doc.username) 
    { 
     //handle case 
    } 
    else 
    { 
     //handle case 
    } 
    } 
}); 
0

爲了讓下面的事情解決檢查。 1.檢查您定義的模型名稱或所有模型所在的文件夾名稱必須正確,因爲在我的模型文件夾中,我定義了所有模型我使用的是不同型號名稱,因此沒有模型命名,這是我得到的錯誤。 2.檢查它所在的架構名稱或文件夾名稱。

相關問題