2012-11-01 2 views
0

:호출 기능 당신이 외부 경로 mongojs에서

var birds = db.birds.find(searchTerm, callback); 

가 ... 어떻게 콜백 인수를 전달합니까? 다음과 같이 바인드를 시도했습니다.

birds = db.birds.find(searchTerm, app.get('getBirds').bind(res)); 

...하지만 아무 소용이 없습니다. 그냥 fyi GET 경로의 응답 객체를 전달하려고 시도하고 있으므로 콜백은 res.send (results)를 사용하여 렌더링 할 수 있습니다.

다른 옵션은 app.set ('res': res); 콜백에서 app.get ('res') 호출 - 좋은 생각인지 모르겠습니다. 그것은 작동하지만 이벤트 루프 모델에 너무 순종하지 않습니다. 앱에 대한 요청이 비용이 많이들 것이라고 생각합니까? 어떤 도움이라도 감사하게 받아 들여질 것입니다.

서버로부터 응답 find 호출의 결과를 사용하도록 의도 : :)

답변

0

당신은 일반적으로 익명 함수에 callback 함수 호출을 래핑하여이 작업을 수행 :

db.birds.find(searchTerm, function (err, birds) { 
    callback (err, birds, res); 
}); 
+0

그래, 어떻게 끝났습니까? birds = db.birds.find (searchTerm , function (err, birds) {app.get ('renderResults') (err, birds, res)}); 잘된 친구. :) – user1775718

1

당신이 달성하려고하는 것을 확인하려면? 응답으로 매개 변수를 취하는 함수에 find을 래핑 한 다음 응답 내부에서 액세스 된 find에 대한 콜백을 정의 할 수 있습니다.

예를 들어

(테스트되지 않은 코드,하지만이 아이디어입니다) :

// function called when a request is received 
function getBirds(searchTerm, res) { 
    birds = db.birds.find(searchTerm, function(err, docs) { 
     // code in here will have access to res because it is in a closure 
    }); 
} 
+0

안녕 @shelman을 db.birds.find()는 nosql 쿼리 (여기서 'searchTerm'변수로 표시)를 사용하여 데이터베이스 ('db')의 'birds'컬렉션에서이를 실행하는 메소드입니다. 콜백 함수를 전달하면 쿼리에서 데이터를 검색 할 때 해당 콜백 함수가 실행됩니다. 이는 차단을 방지하기위한 노드 이벤트 루프 아이디어와 일치합니다. 모든 app.get 라우트에 대해 동일한 콜백을 사용하기 때문에 앱 내에서 getBirds라는 함수로 설정했습니다. 문제는 GET 응답 외부에서 정의 되었기 때문에 res obj에 대한 액세스가 없음 – user1775718

+0

예입니다. 당신이 대략 설명한 것은 그것이 원래 어떻게 있었는지입니다. getBirds를 호출 한 함수는 스크립트에서 해당 경로가 요청 될 때 호출되는 함수입니다. 나는 당신과 같은 코드를 가지고 있었지만 만약 내가 10 개의 다른 라우트를 말하고 있다고 상상했다면 나는 똑같은 코드를 (당신이 코멘트가있는 시점에서) 열 번 이상 쓰고있다. 그래서 압축을 풀어서 앱에 저장하여 한 번만 작성했습니다. 앞에서 언급했듯이 문제는 GET 함수 외부에서 생성 되었기 때문에 res obj에 액세스 할 수 없기 때문입니다. – user1775718

+0

매개 변수를 콜백에 전달하는 방법이 있는지 확실하지 않습니다. 전달 된 res 개체를 사용하여 익명으로 함수를 정의하는 것이 좋습니다. – shelman