2015-09-04 73 views
2

我正在嘗試使用node-neo4j模塊編寫與neo4j一起使用的node.js應用程序。我試圖從nodejs提交一個查詢,發現它不起作用,所以我嘗試從neo4j browser console提交它,以便更容易地根源導致我的錯字,並發現它在那裏正常工作。關於發生了什麼的任何想法?Cypher查詢不能從node.js工作,但從neo4j控制檯工作

查詢:

Match (a:Paper { uid:26327110, citation:"Seitz A. \"Moving beyond a binary view of specificity in perceptual learning.\" Journal of vision. 15 12 (2015 Sep 1): 1422.", date:"2015 Sep 1"}) return a 
+0

我想也許它與URL編碼有關,因爲它是通過服務器作爲http請求提交的,而且我確實有'\'字符來轉義引號,但是將其編碼爲%5C的URL沒有影響。 – Dude

+0

你得到的錯誤是什麼,控制執行你的查詢? –

+0

錯誤說'[錯誤:當對neo4j運行密碼查詢時發生HTTP錯誤401。 undefined:undefined]' – Dude

回答

2

在這種情況下,事實證明我只是一個白癡 - 發生錯誤是因爲我用新密碼創建了一個新數據庫,並忘記調整節點服務器的身份驗證。如果您曾經遇到過類似的問題,並在您的節點控制檯中看到以下錯誤:那麼您也有一個白癡的例子。正如Kunal在對原始問題的評論中所建議的,請檢查您的身份驗證。

2

你或許應該使用反正參數和他們可能與任何編碼問題提供幫助。這看起來像這樣:

var query_string = "MATCH (a:Paper {attributes}) RETURN a" 

var attributes = {uid: 26327110, citation: "Seitz A. \"Moving beyond a binary view of specificity in perceptual learning.\" Journal of vision. 15 12 (2015 Sep 1): 1422.", date: "2015 Sep 1"}; 

db.cypherQuery(query_string, {attributes: attributes}); 

當然,如果你喜歡,你可以使用個別參數的個別值。參數不僅有助於您不擔心編碼,而且允許Neo4j緩存查詢。另外,如果您傳遞來自用戶參數的值,還可以幫助您防止注入攻擊。

+0

嗨,布萊恩,這聽起來很酷,但我不認爲db.query是我提到的模塊的本地函數:[link](https://github.com/philippkueng /節點的Neo4j)。我錯了嗎?因爲這聽起來很方便。 – Dude

+0

我不知道我以前是否使用過'node-neo4j',但是我查了一下,它似乎在那裏:http://coffeedoc.info/github/thingdom/node-neo4j/master/classes/GraphDatabase .html#query-instance –

+0

啊,'thingdom node-neo4j'模塊是一個不同的模塊。我指的是philippkueng node-neo4j模塊。 – Dude