我在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>
正如您所看到的,我尝试使用REST API与Cypher,但它产生以下错误:
"加载资源失败:服务器响应状态为401(未授权)"
我知道这是因为我没有登录到石墨烯。我的问题是双重的:
- 我可以在后台实现登录到石墨烯(通过PHP可能),以便所有访问HTML页面的用户都可以创建一个节点吗?
- 我可以不安装Neo4j REST驱动程序吗?我不能在我的服务器空间安装程序,只能上传文件。
谢谢你,我希望我的问题有意义。
-
您的代码中似乎没有包括身份验证凭据。GrapheneDB需要HTTP基本认证
-
你应该能够在JS中做到这一点。但是,这不是推荐的,因为任何人都可以获得您的凭据,访问您的数据库,修改和删除数据等。
如果您希望您的用户能够查询和修改数据库,我建议:
- 使用代理或webapp连接到实例,从而对用户隐藏身份验证凭据
- 在你的应用程序中实现某种用户认证,这样只有登录到你的应用程序的用户才能查询/修改你的数据库。
我在这里快速地做了一些事情。当我是layz时,我在外部计算了username:password的base64(使用openssl enc 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);