2015-08-24 56 views
0

我收到錯誤:未定義功能錯誤()與本地託管的數據庫

「類型錯誤:未定義是不是一個函數」 ..for指定者()在下面的代碼。

// Require mongo db user model 
var User = require("./models/user.js"); 

. 
. 
. 

// list of members page ==================================================== 
// protected page 
app.get("/members", isLoggedIn, function(req, res) { 

    // get array list of usernames 
    var pttCursor = User.find({ } , { firstname: 1, lastname: 1, _id: 0 }); 
    var membersArray = pttCursor.toArray(function(err, docs){}); 

    res.render("members.ejs", { 
     user : req.user, // get user out of session and pass to template 
     members : membersArray 
    }); 
}); 

我希望/ members頁面可以訪問一組用戶名。

編輯:我也曾嘗試 「cursor.map()」 ..我得到同樣的錯誤從模型

// get array list of usernames 
var pttCursor = User.find({ } , { firstname: 1, lastname: 1, _id: 0 }); 
var membersArray = pttCursor.map(function(pttDoc){ 
    return pttDoc.firstname + pttDoc.lastname; 
}); 
+0

Mongoose不支持這兩種方法。這些只存在於MongoDB shell中。 ''.toArray()'存在於本地驅動程序中。但貓鼬沒有這些。默認情況下,「mongoose」已經以數組形式返回結果,除非您明確要求使用遊標或流。 –

+0

@blakes,我會像這樣設置它:'var membersArray = User.find({},{firstname:1,lastname:1,_id:0});'? – Fabian

+0

我想建議閱讀[documentation](http://mongoosejs.com/docs/api.html#model_Model.find) –

回答

1

.find方法返回Query對象不Cursor

要執行查詢,請在pttCursor上使用.exec()方法。

所有的異步方法都應該用回調來處理。

var pttCursor = User.find({ } , { firstname: 1, lastname: 1, _id: 0 }) 
    .exec(function(err, membersArray){ 
     res.render("members.ejs", { 
      user : req.user, // get user out of session and pass to template 
      members : membersArray 
     }); 
    }); 
相關問題