2013-08-28 44 views
2

CouchDB使用javascript來驗證,查詢,執行map-reduce等。我想知道是否有任何方法可以在這些JavaScript函數中使用node.js庫?如使用require('http')或與npm一起安裝的某些第三方模塊。使用CouchDB和Node.js庫

謝謝。

回答

0

不,沒有辦法從CouchDb內部的Node模塊使用外部JavaScript。你可以做一些有限的共享:http://wiki.apache.org/couchdb/HTTP_view_API#Sharing_Code_Between_Views

節點是一個暴露給Javascript語言綁定的平臺,所以Node的「優點」在執行環境中。

儘管有一種使用Python編寫視圖的方法,但我並不知道Node的任何類似內容。

+1

值得指出的是,CouchDB目前使用Mozilla的SpiderMonkey JS引擎來執行。但是,CouchDB郵件列表中已經討論過使用Node.js替代它,這將允許在CouchDB中使用NPM模塊。 (但這是一個很長的路要走) –

+0

我發現[CouchJS](https://github.com/iriscouch/couchjs),它會值得一試嗎? –

+0

有趣的發現。用於生產用途?不,我不會使用它。另外,由於節點是單線程的,因此您需要將所有內容都彙集到單個路徑中。 – WiredPrairie

1

只要不需要Node.js特定的庫(如http),就可以使用Node.js庫。例如,async在CouchDB中有效。經驗法則:如果它的目的是服務器的客戶端,你應該很好。

您可以使用CommonJS的module.exportsexports[something]模式在視圖之間共享代碼。查看the documentation瞭解更多詳情。

例如,考慮這樣的觀點:

{ 
    _id:"_design/test", 
    views: { 
    lib: { 
     test: "exports.guests = 42;" 
    }, 
    fish_per_person: { 
     map: function(doc){ 
     var guests = require('views/lib/test').guests; // 42 
     emit(doc.number_of_fish, doc.number_of_fish/guests); 
     } 
    } 
    } 
} 

fish_per_person視圖需要在lib/test導出的值guests

+0

謝謝。但我想我會需要這些庫。 –

+0

哪些庫?你想達到什麼目的?這聽起來像是一個挑戰,我非常感興趣。 – garbados

+0

我現在沒有具體的事情要完成。但我可以想象一些。例如,如果我在[在線裁判系統](http://en.wikipedia.org/wiki/Online_judge)上工作,在用戶提交代碼後,我需要使用'child_process'在CouchDB中進行編譯和運行更新處理器。 –