2014-12-10 6 views
1

저는 얼마 전 ExpressJS를 사용했습니다. 몽구스를 사용하는 법을 배우고 있습니다.호출 할 인수로 model.find를 전달하면 오류가 발생합니다.

내 쿼리의 콜백에서 : function (error, data) {...}이 오류를 처리하는 데 반복되는 코드가 많습니다. 이를 위해 쿼리를 호출하고 오류를 처리 한 다음 데이터를 콜백에 전달하는 checkQuery 함수를 만들었습니다.

아래의 코드 중 일부는 실제 질문과 관련이 없으므로 제거, 단순화 및 주석 처리되었습니다.

checkedQuery(User.getNames, function(userNames) { 
    // ... Handles the user names 
    return; 
} 
: 나는 아무 문제가없는이 두 가지 기능을 사용

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

: 내 몽구스 모델에서 다른 곳

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

나는 단순히 모든 사용자 이름의 목록을 가져옵니다 기능을 정의

내가 가진 문제는 check.Query에 User.find 스트레이트 함수를 전달하려고 할 때입니다.

여기

, 나는 몽구스 모듈에서 오류가 발생하고있다 :

TypeError: Cannot read property 'discriminatorMapping' of undefined 
    at find (/mypath/server/node_modules/mongoose/lib/model.js:955:18) 
마지막으로는, 실제 코드에, 난 단지 콜백 기능을 User.find 호출하면 유효하지 않으며 원인이 있습니다 싶습니다

오류 : User.find (기능 (오류, 사용자) { //...Handle 오류와 사용자 데이터 }

나는 범위 지정이 원인이되는 인자에 문제가 의심하지만 난 ' 확실하지 않아. 어떤 도움을 많이 주시면 감사하겠습니다!

또한 오류 점검 쿼리 작성을위한 더 나은 패턴을 보여주고 기능적으로 몽구스 쿼리를 통과하는 예제를 제시 할 수 있다면 입증 된 대안을 갖고 싶습니다.

+3

'User.find'대신'User.find.bind (User)'를 전달하십시오. – idbehold

+0

감사합니다. – ty10r

답변

1

@의 idbehold의 코멘트가 대답을 변환 :

패스 User.find.bind(User)을 대신 User.find의.

관련 문제