Я использую 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 в целом, я хотел бы иметь проверенную альтернативу.
Передача 'User.find.bind (Пользователь)' вместо просто 'User.find'. – idbehold
Спасибо, это сработало. – ty10r