在你深入阅读之前,这个问题可能是关于Node/Express的,也可能是关于Gremlin的--我找不出哪个是原因?
在我的Linux机器上,我以SU的身份启动了Janusgraph:docker run --name janusgraph-default --volume /home/greg/Downloads/gremlin:/dataImports janusgraph/janusgraph:latest (我挂载了一个本地文件夹,以获取air-routes.graphml文件)
在同一个机器上,在一个新的终端中,我启动了gremlin-server:docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh (它给了我一个gremlin控制台)
在gremlin控制台上,我可以运行:remote connect tinkerpop.server conf/remote.yaml
然后是:> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")
最后::> g.V().has('airport','code','DFW').values(),不出所料,它返回达拉斯沃斯堡的详细信息。
在演示了我已经成功地加载了数据并且可以从控制台查询它之后,我想创建一个Node/Express程序,该程序最终将运行一些一般的静态查询来构建一系列仪表板页面。
我拼凑出了我的第一个Express应用程序:
const express = require('express');
const app = express();
const router = express.Router();
const gremlin = require('gremlin');
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const __ = gremlin.process.statics;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const column = gremlin.process.column;
const direction = gremlin.process.direction;
const p = gremlin.process.P;
const textp = gremlin.process.TextP;
const pick = gremlin.process.pick;
const pop = gremlin.process.pop;
const order = gremlin.process.order;
const scope = gremlin.process.scope;
const t = gremlin.process.t;
// const tq = traversal().withRemote(new DriverRemoteConnection('ws://localhost:8182/gremlin'));
const tq = traversal().withRemote(new DriverRemoteConnection('ws://localhost:8182'));
const g = tq;
router.get('/home', (req,res) => {
res.send('<h1>Hello World,</h1><p>This is home router</p>');
});
// my first pass
// router.get('/query', async (req,res) => {
// const response = await gremlinQuery();
// //const response = gremlinQuery();
// const resp = res.send(response);
// });
//my second pass
router.get('/query', (req,res) => {
const response = gremlinQuery();
console.log(response);
const resp = res.send(response);
});
//<snipped out other router.gets>
app.use('/', router);
app.listen(process.env.port || 3000);
console.log('Web Server is listening at port '+ (process.env.port || 3000));
async function gremlinQuery() {
let results;
//function gremlinQuery() {
try{
const results = await g.V().has('airport', 'code', 'LHR').values().toList();
console.log(results);
//JsonConvert.DeserializeObject<results>(JsonConvert.SerializeObject(results2));
var arr = JSON.parse(results);
console.log('output: ' + arr);
return('output: ' + arr);
} catch (error) {
console.error(error);
}
}代码中的查询返回gremlin-console中的预期结果,但在此代码(我在VSCode中以调试模式运行)中,它在localhost:3000上启动预期的网页,但没有预期的JSON响应数据,并且在调试终端上,它停止在Promise {<pending>},我不能确定我是否a)没有连接到gremlin-server?b)弄乱了我的async/await (它在路由器函数调用的函数上可以吗?)c)其他东西
(不得不说,网络上并没有充斥着Node/Express/Gremlin/Janusgraph的例子可供借鉴。)
Docker版本19.03.11,内部版本42e35e61f352
5.3.18-lp152.60-default #1 SMP Tue Jan 12 23:10:31 UTC 2021 (9898712) x86_64 GNU/Linux
gremlin> Gremlin.version() ==>3.4.6
节点--版本v14.15.4
快递??
发布于 2021-02-05 11:05:37
gremlinQuery是一个异步函数,那么你必须等到函数resolve一个结果。
和gremlinQuery看起来像是一个未使用的函数(?)
怎么样
async function gremlinQuery() {
const results = await g.V().has('airport', 'code', 'LHR').values().toList();
// return JSON.parse(results); // results is a string???
return results;
}express路由器
router.get('/query', async (req, res) => { // async handle
try {
const response = await gremlinQuery(); // wait until the query response
// res.send(response);
res.json(response); // send it to client as a json object
} catch (error) {
res.status(500).send(error); // Notice to client - Some thing went wrong
}
});发布于 2021-07-24 04:21:52
我不知道为什么,但有一个名称是创建客户端变量的效果,因为我面临着相同的问题,但当使用与文档相同的常量名称时,它是有效的
单据变量示例
const authenticator = new Gremlin.driver.auth.PlainTextSaslAuthenticator(
`/dbs/${GREMLIN_DATABASE}/colls/${GREMLIN_GRAPH}`,
GREMLIN_PRIMARY_KEY
);
const client = new Gremlin.driver.Client(GREMLIN_ENDPOINT, {
authenticator,
traversalsource: "g",
rejectUnauthorized: true,
mimeType: "application/vnd.gremlin-v2.0+json",
});https://stackoverflow.com/questions/66054964
复制相似问题