2013-02-19 25 views
1

您好我想知道你是否能幫助我建立動態的方法鏈,我懷疑,如果你知道這是很容易做到添加方法...JavaScript方法鏈,從一個數組

使用貓鼬和我的node.js正在查詢一個mongo數據庫。 我用我傳遞一個對象,看起來像這樣的功能:

transaction = { 
     model: a mongoose model 
     req: Express.js request object 
     res: Express.js response object 
     query: a mongo db query eg, {_id:xxxxx} 
     populate: [ { 
     field: 'name_of_doc_field' 
     select: 'field1,field2' 
     } ] 
    } 

我動態地構造查詢,並在功能上,我不知道有多少領域我需要填充,或者是否需要偏移或限制。

我想我的鏈發現:

transaction.model.find(transaction.query).skip(offset).limit(limit).exec(function(err, collection_obj){...}) 

如何動態地建立這條產業鏈,我還需要測試是否在測試對象是提供一個偏移量,如果是方法添加到.skip鏈等,並用填充方法,將有一個項目的數組,該數組中的每個項目將需要一個新的填充方法添加到鏈中。

最後,我需要一個exec方法到鏈的末尾。

感謝您的幫助提前

// Generated by CoffeeScript 1.4.0 
    module.exports = { 
     findMany: function(transaction) { 
     var collection_obj, limit, offset; 
     offset = parseInt(transaction.req.query.offset) || 0; 
     limit = parseInt(transaction.req.query.limit) || 100; 
     collection_obj = null; 
     return transaction.model.find(transaction.query).skip(offset).limit(limit).exec(function(err, collection_obj) { 
      return found(err, collection_obj, transaction.req, transaction.res); 
     }); 
     }, 
    } 
+1

你的API似乎相當模糊我。你說'transaction.model'是一個貓鼬模型。這是否已經有你正在尋找的'find'功能?如果不是,你是否期望擴大貓鼬API? – 2013-02-19 12:45:06

+0

你想'skip','limit'和'exec'方法作用於'transaction'還是'model'? – Bergi 2013-02-19 13:10:07

+0

我分離這個功能的原因是,我會在很多模型上重複這個功能。 我想查找交易對象提供的給定模型中的記錄。我誤解了什麼嗎?它的工作原理與現在一樣,但不處理缺失的屬性,如缺少「限制」,也不運行.populate方法,因爲我無法解決如何動態添加到變化中的每個元素陣列。 – 2013-02-19 13:24:22

回答

1

可以打破鏈成,你可以有條件執行的基礎上transaction內容的步驟:

var q = transaction.model.find(transaction.query); 
if (offset) { 
    q = q.skip(offset); 
} 
if (limit) { 
    q = q.limit(limit); 
} 
if (transaction.populate) { 
    transaction.populate.forEach(function(pop) { 
    q = q.populate(pop.field, pop.select); 
    }); 
} 
q.exec(function(err, collection_obj){...}); 
+0

這似乎工作,你可以告訴我是新來的JavaScript。 從我理解的鏈接工作,因爲下一個方法繼承了前一個方法的輸出。因此,在這裏,我們只需設置對象'q'並不斷添加新方法。 exec方法必須檢查所有其他連接到q的方法。謝謝你的幫助。 – 2013-02-19 13:57:26

相關問題