2012-11-01 28 views
0

在mongojs,當你這樣做:調用函數以外的路徑

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

...你如何參數傳遞給回調?我試過綁定,如:

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

......但無濟於事。只是fyi我試圖傳遞GET路由的響應對象,以便回調可以使用res.send(結果)呈現。

另一個選項是設置app.set('res':res);並從回調中調用app.get('res') - 我不確定這是個好主意。它的工作原理,但它不太遵守事件循環模型 - 我認爲回到應用程序的請求可能是昂貴的?任何幫助將被感激地接受。 :)

回答

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包裝在一個函數中,該函數將響應作爲參數,然後將回調定義爲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'表示)並在數據庫中的'birds'集合('db')上執行它的方法。你傳遞一個回調函數,以便當它從查詢中檢索數據時,它將執行該回調函數,這符合節點事件循環的想法以防止阻塞。因爲我對所有app.get路由使用相同的回調函數,所以我在應用程序中將其設置爲一個函數(稱爲'getBirds')。問題在於,因爲它是在GET響應之外定義的,所以它無法訪問res obj – user1775718

+0

是的。你所概述的是它最初的樣子。您調用getBirds的函數是我在腳本中的函數,該函數在請求該路由時被調用。我有和你一樣的代碼,但是如果你想象我有10條不同的路線,那麼我寫出相同的代碼(在你有評論的地方)十倍。這就是爲什麼我提取它並將其保存在應用程序中,以便我只寫過一次。正如我所提到的,這個問題是因爲它現在創建在GET函數之外,所以它無法訪問res obj。 – user1775718

+0

我不確定是否有方法將參數傳遞給回調函數 - 我建議用傳入的res對象匿名定義函數。 – shelman