2014-07-14 58 views
2

我正試圖從CasperJS中將記錄插入到MongoDB集合中,但在第一個障礙處我被阻止。如何在CasperJS中需要MongoDB?

我第一次在我的應用程序的根目錄下運行以下命令安裝的MongoDB:

npm install mongodb 

這成功完成,沒有任何錯誤。

我有叫server.js一個CasperJS文件,其中包含此行:

var db = require('mongodb'); 

當我嘗試運行casperjs server.js這一點,我得到以下錯誤:

js-bson: Failed to load c++ bson extension, using pure JS version 
Error: Cannot find module 'util'             
    /home/aaron/Documents/git/mateserver/phantomjs:/bootstrap.js:289 
    /home/aaron/Documents/git/mateserver/phantomjs:/bootstrap.js:254 in require 
    /home/aaron/Documents/git/mateserver/node_modules/mongodb/lib/mongodb/commands/insert_command.js:2 
    /home/aaron/Documents/git/mateserver/node_modules/mongodb/lib/mongodb/commands/insert_command.js:162 

好像我缺少一個包,所以我運行命令:

npm install util 

哪個運行成功所以我嘗試再次啓動我的應用程序,但得到此錯誤:

js-bson: Failed to load c++ bson extension, using pure JS version 
TypeError: 'undefined' is not a function (evaluating 'inherits(InsertCommand, BaseCommand)') 
    /home/aaron/Documents/git/mateserver/node_modules/mongodb/lib/mongodb/commands/insert_command.js:38 
    /home/aaron/Documents/git/mateserver/node_modules/mongodb/lib/mongodb/commands/insert_command.js:162 

而這就是我卡住的地方。我該如何解決這個問題? MongoDB與CasperJS不兼容?

我正在使用CasperJS版本1.1.0-beta3和MongoDB(通過npm安裝)版本1.4.7。主機系統是Ubuntu 14.04 64位。

回答

1

CasperJS在phantomjs上運行,它與node.js具有相似但不同的標準模塊。您需要查看mongodb模塊內部的所有require'd模塊,並重寫它們以使用phantomjs API而不是node.js API。您可能會遇到一些無法解決的問題。

inherits函數的情況下,似乎對內部node.js util模塊存在循環依賴性,無法解析。您可以通過在node_modules/util/node_modules/inherits中覆蓋inherits.jsinherits_browser.js來解決此問題。

+1

謝謝。這聽起來可能比它值得的更多的努力。也許我應該花更多的時間重新編寫我在CasperJS中使用SpookyJS的內容,甚至爲一些Selenium webdriver控制器製作一些自定義封裝。 –

+1

您可以從節點產生(或使用child_process)casper實例,將結果寫入文件,從節點讀取該文件並保存到mongodb中。 –

+0

@ ArtjomB。 :你剛纔在這裏說的解決方案。這會工作嗎? –

0

你可以看看SpookyJS,因爲它從NodeJS驅動CasperJS