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
没有评论:
发表评论