如何仅通过Javascript访问我的GrapheneDB neo4j数据库

如何仅通过Javascript访问我的GrapheneDB neo4j数据库,javascript,php,neo4j,Javascript,Php,Neo4j,我有一个GrapheneDB中的Neo4j数据库,我希望我和我的朋友能够通过Javascript从HTML页面创建节点和关系。我将HTML页面托管到我的服务器空间 这就是我试图测试节点创建的内容 <!doctype html> <html> <head> <title></title> </head> <body> </body> </html> script type="tex

我有一个GrapheneDB中的Neo4j数据库,我希望我和我的朋友能够通过Javascript从HTML页面创建节点和关系。我将HTML页面托管到我的服务器空间

这就是我试图测试节点创建的内容

<!doctype html>
<html>
<head>
    <title></title>
</head>
<body>
</body>
</html>

script type="text/javascript">
    var r = new XMLHttpRequest();
    r.open("POST", "GRAPHENE REST URL", true);
    r.onreadystatechange = function () {
        if (r.readyState != 4 || r.status != 200) return;
        var json_response = JSON.parse(r.responseText);
        console.log(json_response);
    };
    var cyQuery=JSON.stringify({"query" : "CREATE (ee:Person { name: 'Emil', klout: 99 })"});
    r.send(cyQuery);
</script>

script type=“text/javascript”>
var r=新的XMLHttpRequest();
r、 打开(“POST”,“GRAPHENE REST URL”,true);
r、 onreadystatechange=函数(){
如果(r.readyState!=4 | | r.status!=200)返回;
var json_response=json.parse(r.responseText);
log(json_响应);
};
var cyQuery=JSON.stringify({“query”:“CREATE(ee:Person{name:'Emil',klout:99}”);
r、 发送(cyQuery);
如您所见,我尝试将REST API与Cypher一起使用,但它产生以下错误:

“加载资源失败:服务器响应状态为401(未授权)”

我知道这是因为我没有登录到Graphene。 我的问题有两个:

  • 我是否可以在后台实现登录Graphene(可能通过PHP),以便所有访问HTML页面的用户都可以创建一个节点
  • 我可以在不安装Neo4j REST驱动程序的情况下执行此操作吗?我不能在我的服务器空间安装程序,我只能上传文件
  • 谢谢,我希望我的问题有意义

  • 您的代码中似乎没有包含身份验证凭据。GrapheneDB需要HTTP基本身份验证

  • 您应该能够在JS中实现这一点。但是,不建议这样做,因为任何人都可以获取您的凭据、访问您的数据库、修改和删除数据等

  • 如果希望用户能够查询和修改数据库,我建议:

    • 使用代理或webapp连接到实例,从而对用户隐藏身份验证凭据
    • 在应用程序中实施某种用户身份验证,以便只有登录到应用程序的用户才能查询/修改数据库

      • 我在这里很快就做了这样的事情。 当我是layz时,我在外部(使用openssl enc base64)计算username:password的base64,并将其作为环境变量提供,正确的做法是同时提供这两个变量,并在node中进行编码

        cat package.json 
        
        
        {
          "name": "proxy-neo4j-db",
          "version": "0.0.1",
          "private": true,
          "engines": {
            "node":"0.8.26",
            "npm":"1.1.49"
          },
          "scripts": {
            "start": "node proxy"
          },
          "dependencies": {
            "connect": "2.19.5",
            "http-proxy" :"1.1.4"
          }
        }
        
        cat proxy.js 
        
        
        var httpProxy = require('http-proxy');
        var connect = require('connect');
        
        var target = { target: process.env.NEO4J_URL || process.env.GRAPHENEDB_URL || "http://localhost:7474" };
        var port = process.env.PORT || 8001;
        var auth = "Basic "+process.env.AUTH;
        
        connect.createServer(
          function (req, res) {
            req.headers['Authorization']=auth;
            proxy.web(req, res);
          }
        ).listen(port);
        
        var proxy = httpProxy.createProxyServer(target);
        

        谢谢你@albertoperdomo。你知道如何使用代理或webapp连接到GrapheneDB实例而不被用户看到吗?我不要求提供完整的教程,可能只是一个开始的链接,因为我没有这方面的经验。