首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我找不到从gremlin-server获取数据的方法,永远使用node/express - promise {<pending>}

我找不到从gremlin-server获取数据的方法,永远使用node/express - promise {<pending>}
EN

Stack Overflow用户
提问于 2021-02-05 06:44:07
回答 2查看 158关注 0票数 0

在你深入阅读之前,这个问题可能是关于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应用程序:

代码语言:javascript
复制
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

快递??

EN

回答 2

Stack Overflow用户

发布于 2021-02-05 11:05:37

gremlinQuery是一个异步函数,那么你必须等到函数resolve一个结果。

gremlinQuery看起来像是一个未使用的函数(?)

怎么样

代码语言:javascript
复制
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路由器

代码语言:javascript
复制
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
  }
});
票数 0
EN

Stack Overflow用户

发布于 2021-07-24 04:21:52

我不知道为什么,但有一个名称是创建客户端变量的效果,因为我面临着相同的问题,但当使用与文档相同的常量名称时,它是有效的

单据变量示例

代码语言:javascript
复制
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",
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66054964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档