2014-12-10 2 views
1

Я использую ExpressJS в течение некоторого времени. Я учусь использовать Mongoose.Передача model.find как аргумент, вызываемый причинами Ошибка

В обратном вызове моих запросов: функция (ошибка, данные) {...} У меня много повторяющегося кода с обработкой ошибки. Для этого я сделал функцию checkQuery, которая вызывает запрос, обрабатывает его ошибку, а затем передает данные на обратный вызов.

Примечание. Некоторые из приведенных ниже кодов были удалены, упрощены и закомментированы, поскольку они не имеют отношения к актуальному вопросу.

function checkedQuery(queryFn, callback) { 
    queryFn(function(error, data) { 
    if (error) { 
     // ServerErrorResponse(....); Handles sending out the proper json error response 
     return; 
    } 
    callback(data); 
    }); 
} 

В другом месте в моей модели Mongoose я определил функцию, которая просто получает список всех имен пользователей:

UserSchema.statics.getNames = function(callback) { 
    var User = mongoose.model('User'); 
    User.find({}, 'name', callback); 
} 

Используя эти две функции вместе у меня нет вопроса:

checkedQuery(User.getNames, function(userNames) { 
    // ... Handles the user names 
    return; 
} 

Проблема у меня есть, когда я пытаюсь передать функцию User.find прямо в checkedQuery:

checkedQuery(User.find, function(users) { 
    // ... Handles the users 
    return; 
} 

Здесь я получаю сообщение об ошибке из модуля мангустов:

TypeError: Cannot read property 'discriminatorMapping' of undefined 
    at find (/mypath/server/node_modules/mongoose/lib/model.js:955:18) 

Наконец, на фактический код, я хотел бы отметить, что вызов User.find только функцию обратного вызова не является действительным, и не вызывает ошибка: User.find (функция (ошибка, пользователи) { //...Handle данные об ошибках и пользовательских }

Я подозреваю, что что-то не так с обзорным и аргументами, что является причиной этого, но я м неуверенный. Любая помощь высоко ценится!

Кроме того, если есть какие-либо примеры, вы можете указать мне, для чего лучше создать шаблон для создания функций с проверенными ошибками и функционально обходить запросы mongoose в целом, я хотел бы иметь проверенную альтернативу.

+3

Передача 'User.find.bind (Пользователь)' вместо просто 'User.find'. – idbehold

+0

Спасибо, это сработало. – ty10r

ответ

1

Преобразование комментарий @ idbehold чтобы ответить:

Pass User.find.bind(User) вместо просто User.find.

Смежные вопросы