在node.js的Cypher REST API中为Neo4j提供'query'参数的正确方法

如何在node.js中通过POST请求构造正确的Cypher查询到Neo4j?

码:

var http = require('http'); var options = { host: 'a90cfa68c.hosted.neo4j.org', port: 7357, path: '/db/data/cypher', method: 'POST', headers: { 'Authorization': 'Basic ' + new Buffer("<login>:<password>").toString('base64') }, "Content-Type" : "application/json", "query" : "START root=node(*) RETURN root" // <--- Doesn't work :( }; http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }).end(); 

结果:

 STATUS: 400 HEADERS: {"content-length":"340","content-encoding":"UTF-8","content-type":"application/json","access-control-allow-origin":"*","server":"Jetty(6.1.25)"} BODY: { "message" : "You have to provide the 'query' parameter.", "exception" : "BadInputException", "stacktrace" : [ "org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:63)", "java.lang.reflect.Method.invoke(Method.java:597)", "org.neo4j.server.extension.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:57)" ] } 

预期结果:
在Neo4j控制台中所有节点的列表(与POST /db/data/cypher {"query":"START root=node(*) RETURN root"}


解决scheme (感谢Andrew Palumbo):

 // Changes goes here: var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); // Writing into body: req.write('{"query":"START root=node(*) RETURN root"}'); req.end(); 

您提供了“查询”作为http.request的无法识别的选项,但您需要write其作为请求的主体来write 。 您也可能想要移动headers选项对象内的“Content-Type”行。

看一下节点文档中的例子:

http://nodejs.org/api/http.html#http_http_request_options_callback

你也可以考虑使用像Express这样的框架