Neo4j / Node.js:通过http端点检索数据

时间:2017-06-28 06:01:15

标签: node.js neo4j

我试图从neo4j http事务端点检索一些数据,并且我能够打印结果,但不能将数据存储到变量中。

var http = require("http");
var r = require("request");

var txUrl = "http://localhost:7474/db/data/transaction/commit";

function cypher(query) {
  r.post({  uri:txUrl,
            json:{
              statements:[{
                statement:query
              }]
            },
          },
          function(error,response,body){
            console.log(JSON.stringify(body));
          }
       );
}

var query = "MATCH (n:Groups) RETURN n.name";

function process_request(req,res){
    var body = JSON.stringify({name:"Test"});
  //body = cypher(query);
    var content_length = body.length;
    res.writeHead(200, {
        'Content-Length': content_length,
        'Content-Type': 'application/json'
    });
    res.end(body);
}

var s = http.createServer(process_request);
s.listen(8080);

目前我不想使用其他一些neo4j javascript库,但只是将json结果存储在var中,并在浏览器中将其作为application / json打印。

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:0)

你的cypher函数没有返回任何内容......而nodejs请求正在使用回调函数。

所以你需要这样的东西:

var http = require("http");
var r = require("request");

var txUrl = "http://localhost:7474/db/data/transaction/commit";

function cypher(query, callback) {
  r.post({  uri:txUrl,
            json:{
              statements:[{
                statement:query
              }]
            },
          },
          function(error,response,body){
            callback(JSON.stringify(body));
          }
       );
}

var query = "MATCH (n:Groups) RETURN n.name";

function process_request(req,res){

    var callback = function(data) {
        res.writeHead(200, {
            'Content-Length': content_length,
            'Content-Type': 'application/json'
        });
        res.end(data);
    }
    cypher(query, callback);

}

var s = http.createServer(process_request);
s.listen(8080);

干杯。

答案 1 :(得分:0)

感谢您的回复。 作为一个新手,我并没有很好地了解回调是如何工作的,但现在它有点清楚。

您的代码无法正常运行,但我在此处发布了解决方案:使用Promises。 它存在" request-promise-native"为您处理一切的模块。 所以,代码没问题:

var http = require("http");
var rp = require("request-promise-native");

var txUrl = "http://localhost:7474/db/data/transaction/commit";
var query = "MATCH (n:Groupe) RETURN n";
var options = {
  method: 'POST',
  uri: txUrl,
  body: {
    statements:[{
      statement:query
    }]
  },
  json: true
};

function process_request(req,res){
  rp(options)
    .then(function(parsedBody){
      var data = JSON.stringify(parsedBody);
      console.log(data);
      var content_length = Buffer.byteLength(data);
      res.writeHead(200, {
              'Content-Length': content_length,
              'Content-Type': 'application/json'
      });
      res.end(data);
    })
    .catch(function(err){
      var catch_error = JSON.stringify({error: err});
      console.log(catch_error);
      res.end(catch_error);
    });
}

var s = http.createServer(process_request);
s.listen(8080);