我试图从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打印。
任何人都可以提供帮助吗?
答案 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);