2021年2月4日星期四

I can't find a way to get data from gremlin-server, using node/express - promise {

Before you read on too far, this question might be about Node/Express or it might be about Gremlin - I can't work out which is the cause?

On my Linux box as SU, I've started Janusgraph: docker run --name janusgraph-default --volume /home/greg/Downloads/gremlin:/dataImports janusgraph/janusgraph:latest (I mount a local folder, to pick up the air-routes.graphml file)

On the same box, in a new terminal I start gremlin-server: docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh (which gives me a gremlin console)

From the gremlin console, I can run :remote connect tinkerpop.server conf/remote.yaml

Then :> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")

Finally: :> g.V().has('airport','code','DFW').values(), which returns the details for Dallas Fort Worth, as expected.

Having demonstrated that I've loaded the data successfully and can query it from the console, I want to create a Node/Express program that will ultimately run some generally static queries to build a series of dashboard pages.

I have cobbled together my first Express app:

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);      }  }  

The query in the code returns the expected result in gremlin-console but in this code (which I run in debug mode in VSCode) it launches the expected webpage on localhost:3000 but without the expected JSON response data and on the debug terminal it stops at Promise {<pending>} and I can't work out whether I'm a) not connecting to the gremlin-server? b) have made a mess of my async/await (is it OK that it's on the function called by the router function?) c) Something else

(got to say the 'net isn't awash with Node/Express/Gremlin/Janusgraph examples to draw on.)


Docker version 19.03.11, build 42e35e61f352

Linux xxxxxxxx 5.3.18-lp152.60-default #1 SMP Tue Jan 12 23:10:31 UTC 2021 (9898712) x86_64 x86_64 x86_64 GNU/Linux

gremlin> Gremlin.version() ==>3.4.6

node --version v14.15.4

express ??

https://stackoverflow.com/questions/66054964/i-cant-find-a-way-to-get-data-from-gremlin-server-using-node-express-promise February 05, 2021 at 06:44AM

没有评论:

发表评论