2015-08-21 4 views
0

По какой-то причине функции, вызываемые в моем объекте курсора, не найдены. Вот мой код:ТипError: undefined не является функцией - Node.js & MongoDB

var db = req.db; 
var goalscollection = db.get('goalscollection'); 
var collection = db.get('hoursburnedcollection'); 

var cursor = collection.find({goal: selectedgoal}, console.log); 
// the line above prints the correct cursor object 

var doc = cursor.hasNext() ? cursor.next() : null; //line 51 
// the line above gives an error 

Вот ошибка:

TypeError: undefined is not a function 
at /Users/chrispark/Projects/LifeTool/node/routes/index.js:51:27 
at Layer.handle [as handle_request] (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/layer.js:95:5) 
at next (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/route.js:131:13) 
at Route.dispatch (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/route.js:112:3) 
at Layer.handle [as handle_request] (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/layer.js:95:5) 
at /Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/index.js:277:22 
at Function.process_params (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/index.js:330:12) 
at next (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/index.js:271:10) 
at Function.handle (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/index.js:176:3) 
at router (/Users/chrispark/Projects/LifeTool/node/node_modules/express/lib/router/index.js:46:12) 

Есть ли что-то я не хватает? Заранее спасибо.

+0

убедитесь, что ваш 'collection' не неопределенная –

+0

моя коллекция не определена. курсор правильный (т. е. содержит нужные документы) –

ответ

1

Откуда: myCursor?

Использование cursor вместо myCursor:

var doc = cursor.hasNext() ? cursor.next() : null; //line 51 
+0

извините, вот что я имел в виду. даже с изменением, той же ошибкой. –

+0

Какую версию библиотеки mongodb вы используете? –

+0

Версия, которую я использую, - 2.0.33 –

0

Если вы предоставляете функцию обратного вызова find, курсор будет предоставляться только на обратный вызов и не вернулся. Поэтому удалите параметр console.log, и вы получите курсор.

Кроме того, next не возвращает следующий документ, он возвращает вызывающего абонента через асинхронный обратный вызов.

var cursor = collection.find({goal: selectedgoal}); 
if (cursor.hasNext()) { 
    cursor.next(function(err, doc) { 
     console.log(doc); 
    }); 
} 
+0

Это дает ту же ошибку (undefined не является функцией) на cursor.hasNext(). Кажется, что у него проблемы с распознаванием функций mongodb. –

0

Вы уверены, что номер строки ошибки?

Я бы сказал, что ошибка пришедшая из этих линий:

var goalscollection = db.get('goalscollection'); 
var collection = db.get('hoursburnedcollection'); 

Я не могу найти какой-либо метод get в драйвере API. Это должно быть db.collection():

var goalscollection = db.collection('goalscollection'); 
var collection = db.collection('hoursburnedcollection'); 
Смежные вопросы