假设我有以下内容: - 一个能够查询数据库并接收(可能很大)JSON 的 node.js 服务器 - 一个 gremlin 服务器(配置有 gremlin-server-rest-modern.yaml 但也许必须有一些东西更多在那里)
我的问题是:有没有一种方法可以动态地以编程方式添加一个新的图表以供服务器提供服务?我希望我的节点服务器查询数据库并将 JSON 响应发送到 gremlin 服务器;在那里,响应将被转换为图表;从节点服务器,用户将能够发送其他查询并接收复杂的响应。我怎样才能做到这一点?
我尝试使用 [1] 但我不确定如何做我想做的事。您如何实际发送多个(链接的)命令,例如迷你脚本?我知道如何使用控制台,但不使用服务器(作为 REST 服务),因为没有公开的 API。你能给我一个建议或一些例子吗?谢谢!
阿德里安
[1] https://github.com/jbmusso/gremlin-javascript
编辑:我设法用一些简单的命令向服务器发送了一条 POST 消息。如果我发送一个包含所有命令(图形创建和查询)的 POST,它就可以工作。但是,对于多个 POST,不会保存上下文。首先,我发送一个包含内容的 POST:
{
"gremlin" : "graph = TinkerGraph.open(); g = graph .traversal(); graph .addVertex('name', 'adrian', 'age', 21); "
}
然后,我发送另一个 POST
{
"gremlin" : "v2 = graph.addVertex('name', 'gigel', 'age', 22); g.V()"
}
但是,我收到以下错误:
{
"message": "No such property: graf for class: Script4",
"Exception-Class": "groovy.lang.MissingPropertyException",
"exceptions": [
"groovy.lang.MissingPropertyException"
],
"stackTrace": "groovy.lang.MissingPropertyException: No such property: graf for class: Script4\n\tat org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)\n\tat org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)\n\tat Script4.run(Script4.groovy:1)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:834)\n\tat org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:547)\n\tat javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:120)\n\tat org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:314)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\n"
}
上下文没有保存在 gremlin 服务器上?我必须发送要执行的整个脚本吗?如果我想创建两个图表并稍后查询它们怎么办?
谢谢!