【发布时间】:2021-02-05 19:16:24
【问题描述】:
我正在运行 nodejs 并从 ejs 页面,我试图将输入值发送到 Cypher 查询中,这将导致图形的 vis.js 显示。 注意:所有的 javascript 动作都发生在 ejs 页面上,在这种情况下没有服务器联系。
运行查询时,我可以毫无问题地渲染 Neo4j 图表而无需尝试添加输入值。
这有效点击此按钮...
<input type="submit" onclick="displayGraph()" value='Display Graph' class="button">
...运行此函数,其中包含 Cypher 查询(此查询中没有输入)并按预期呈现 Neo4j 图。
function displayGraph() {
// Create the authorization header for the ajax request.
AUTHORIZATION = "Basic " + btoa("abc"+":"+"123");
// Post Cypher query to return node and relations and return results as graph.
restPost({
"statements": [
{
"statement": `MATCH (bry:Brewery)-[r:BREWS]->(b:Beer {name: 'Pliny the Elder'})-[r2:IS_A]->(bt:BeerType)
Optional Match (b)-[r3:BREWED_WITH]->(h:Hop)
Return bry,r,b,r2,bt,r3,h`,
"resultDataContents": ["graph"]
}
]
}).done(function (data) {
// Parse results and convert it to vis.js compatible data.
var graphData = parseGraphResultData(data);
var nodes = convertNodes(graphData.nodes);
var edges = convertEdges(graphData.edges);
var visData = {
nodes: nodes,
edges: edges
};
displayVisJsData(visData);
});
}
这不起作用如果我使用输入字段来捕获啤酒的名称...
<label>
Beer Name:<input name="inputbeer" id="inputbeer" type="text">
</label>
...然后单击相同的按钮...
<input type="submit" onclick="displayGraph()" value='Display Graph' class="button">
...我运行了类似的函数,但是尝试了多种将输入值传递给 Cypher 查询的变体(一切都与上面看到的函数相同,只是修改了 Cypher 查询)...
MATCH (bry:Brewery)-[r:BREWS]->(b:Beer {name: '$inputbeer'})-[r2:IS_A]->(bt:BeerType)
Optional Match (b)-[r3:BREWED_WITH]->(h:Hop)
Return bry,r,b,r2,bt,r3,h
...这个和其他变体不起作用。我试过 {name: {inputbeer}}... {name: {$inputbeer}}... {name: $inputbeer}... 有很多可能性。 我猜这是一个简单的格式问题,但我不知所措。
感谢您的帮助!
【问题讨论】:
-
您应该真的对您的数据库进行某种形式的抽象或信息隐藏。我的意思是,直接公开你的数据库有什么意义呢?如果您的用户具有适当的访问权限并且可以使用官方工具,您会更好。在我看来,这是个坏主意。
标签: javascript forms neo4j cypher ejs