https://github.com/nebula-contrib/nebula-node
Nebula Graph Client for Node.js
https://github.com/nebula-contrib/nebula-node
graphdatabase hacktoberfest nebula-graph nodejs
Last synced: 7 months ago
JSON representation
Nebula Graph Client for Node.js
- Host: GitHub
- URL: https://github.com/nebula-contrib/nebula-node
- Owner: nebula-contrib
- Created: 2020-11-30T09:23:49.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-01-04T09:41:23.000Z (about 2 years ago)
- Last Synced: 2025-05-24T16:23:37.149Z (8 months ago)
- Topics: graphdatabase, hacktoberfest, nebula-graph, nodejs
- Language: JavaScript
- Homepage:
- Size: 1.22 MB
- Stars: 31
- Watchers: 20
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Nebula Nodejs SDK
This repository provides Nebula client API in Nodejs.
## Features
- Muti-Server Support
- Auto-reconnection support
Client will try to reconnect forever, until the server is available again.
- Connection pool support
- Disconnection detection
A heartbeat mechanism is implemented, client will send ping to server each `pingInterval` ms for detect connective
- Thrift enhancement
fix auto reconnect issue[#2407](https://github.com/apache/thrift/pull/2407)
fix performance issue in huge data scene[#2483](https://github.com/apache/thrift/pull/2483)
## API
### Connection Options
| parameter | type | description |
| -------------- | -------- | ------------------------------------------------------------------------------- |
| servers | string[] | nebula servers |
| userName | string | username for login |
| password | string | password for login |
| space | string | space name in nebula server |
| poolSize | number | Pool size for each server(Optional, default:5) |
| bufferSize | number | Command cache in offline or before established connect (Optional, defaul: 2000) |
| executeTimeout | number | Command executing timeout in ms (Optional, default:10000) |
| pingInterval | number | for keepalive, ping duration in ms, (Optional, default:60000) |
### How To
#### Install
For compiling C++ native module, `node-gyp` is required, you can install `node-gyp` by `npm install -g node-gyp`
```shell
npm install @nebula-contrib/nebula-nodejs --save --unsafe-perm
```
#### Simple and convenient API
```typescript
// ESM
import { createClient } from '@nebula-contrib/nebula-nodejs'
// CommonJS
// const { createClient } = require('@nebula-contrib/nebula-nodejs')
// Connection Options
const options = {
servers: ['ip-1:port','ip-2:port'],
userName: 'xxx',
password: 'xxx',
space: 'space name',
poolSize: 5,
bufferSize: 2000,
executeTimeout: 15000,
pingInterval: 60000
}
// Create client
const client = createClient(options)
// Execute command
// 1. return parsed data (recommend)
const response = await client.execute('GET SUBGRAPH 3 STEPS FROM -7897618527020261406')
// 2. return nebula original data
const responseOriginal = await client.execute('GET SUBGRAPH 3 STEPS FROM -7897618527020261406', true)
```
#### Events
| parameter | description |
| ----------------- | -------------------------------------------- |
| sender | the individual connection in connection pool |
| error | Nebula Error |
| retryInfo | Retry information |
| retryInfo.delay | delay time |
| retryInfo.attempt | total attempts |
```javascript
const client = createClient(options)
// connection is ready for executing command
client.on('ready', ({sender}) => {
})
// error occurs
client.on('error', ({ sender, error }) => {
})
// connected event
client.on('connected', ({ sender }) => {
})
// authorized successfully
client.on('authorized', ({ sender }) => {
})
// reconnecting
client.on('reconnecting', ({ sender, retryInfo }) => {
})
// closed
client.on('close', { sender }) => {
}
```
### About hash64 function
`nebula-nodejs` exports `hash64` function for converting `string` to `string[]`, it's based on `MurmurHash3`.
```javascript
// ESM
import { hash64 } from '@nebula-contrib/nebula-nodejs'
// CommonJS
// const { hash64 } = require('@nebula-contrib/nebula-nodejs')
const results = hash64('f10011b64aa4e7503cd45a7fdc24387b')
console.log(results)
// Output:
// ['2852836996923339651', '-6853534673140605817']
```
### About Int64
nodejs cannot repreent `Int64`, so we convert `Int64` bytes to `string`
```javascript
// ESM
import { bytesToLongLongString } from '@nebula-contrib/nebula-nodejs'
// CommonJS
// const { bytesToLongLongString } = require('@nebula-contrib/nebula-nodejs')
const s = '-7897618527020261406'
const buffer = [146, 102, 5, 203, 5, 105, 223, 226]
const result = bytesToLongLongString(buffer)
// result equals s
```
## Development
### Build
```shell
git clone https://github.com/nebula-contrib/nebula-node.git
cd nebula-node
npm install --unsafe-perm
npm run build
```
### Unit Test
```shell
npm run build
npm run test
```
### Unit Test Coverage
```shell
npm run coverage
```
### Publish
```shell
npm run build
cd dist
npm publish
```
## TODO
Not implemented data type for auto parser
| Data Type | property name in nebula response |
| --------- | -------------------------------- |
| DataSet | gVal |
| Geography | ggVal |
| Duration | duVal |
## Released Versions in npmjs.com
| NodeJS Client Version | Nebula Graph Version |
| --------------------- | --------------------- |
| [2.6.2](https://www.npmjs.com/package/@nebula-contrib/nebula-nodejs/v/2.6.2) | 2.6.x |
| [3.0.3](https://www.npmjs.com/package/@nebula-contrib/nebula-nodejs/v/3.0.3) | 3.x |