Skip to content
This repository was archived by the owner on Sep 3, 2021. It is now read-only.

NOTE: This project is no longer actively maintained. Please consider using the official Neo4j GraphQL Library (linked in README).

License

Notifications You must be signed in to change notification settings

neo4j-graphql/neo4j-graphql-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

May 26, 2021
381ef03 · May 26, 2021
Dec 21, 2020
May 20, 2019
May 26, 2021
Sep 7, 2020
Aug 25, 2020
May 26, 2021
May 26, 2021
Jul 22, 2019
Aug 23, 2019
Jul 24, 2020
Jun 21, 2018
May 26, 2021
Aug 30, 2019
Oct 2, 2017
May 26, 2021
May 26, 2021
May 26, 2021
May 26, 2021

Repository files navigation

⚠️ NOTE: This project is no longer actively maintained. Please consider using the official Neo4j GraphQL Library.

CI status npm version Docs link

neo4j-graphql.js

A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations.

neo4j-graphql.js is facilitated by Neo4j Labs.

Installation and usage

Install

npm install --save neo4j-graphql-js

Usage

Start with GraphQL type definitions:

const typeDefs = `
type Movie {
    title: String
    year: Int
    imdbRating: Float
    genres: [Genre] @relation(name: "IN_GENRE", direction: "OUT")
}
type Genre {
    name: String
    movies: [Movie] @relation(name: "IN_GENRE", direction: "IN")
}
`;

Create an executable schema with auto-generated resolvers for Query and Mutation types, ordering, pagination, and support for computed fields defined using the @cypher GraphQL schema directive:

import { makeAugmentedSchema } from 'neo4j-graphql-js';

const schema = makeAugmentedSchema({ typeDefs });

Create a neo4j-javascript-driver instance:

import { v1 as neo4j } from 'neo4j-driver';

const driver = neo4j.driver(
  'bolt://localhost:7687',
  neo4j.auth.basic('neo4j', 'letmein')
);

Use your favorite JavaScript GraphQL server implementation to serve your GraphQL schema, injecting the Neo4j driver instance into the context so your data can be resolved in Neo4j:

import { ApolloServer } from 'apollo-server';

const server = new ApolloServer({ schema, context: { driver } });

server.listen(3003, '0.0.0.0').then(({ url }) => {
  console.log(`GraphQL API ready at ${url}`);
});

If you don't want auto-generated resolvers, you can also call neo4jgraphql() in your GraphQL resolver. Your GraphQL query will be translated to Cypher and the query passed to Neo4j.

import { neo4jgraphql } from 'neo4j-graphql-js';

const resolvers = {
  Query: {
    Movie(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    }
  }
};

What is neo4j-graphql.js

A package to make it easier to use GraphQL and Neo4j together. neo4j-graphql.js translates GraphQL queries to a single Cypher query, eliminating the need to write queries in GraphQL resolvers and for batching queries. It also exposes the Cypher query language through GraphQL via the @cypher schema directive.

Goals

  • Translate GraphQL queries to Cypher to simplify the process of writing GraphQL resolvers
  • Allow for custom logic by overriding of any resolver function
  • Work with graphql-tools, graphql-js, and apollo-server
  • Support GraphQL servers that need to resolve data from multiple data services/databases
  • Expose the power of Cypher through GraphQL via the @cypher directive

Benefits

  • Send a single query to the database
  • No need to write queries for each resolver
  • Exposes the power of the Cypher query language through GraphQL

Contributing

See our detailed contribution guidelines.

Examples

See /examples

Full docs can be found in docs/

Debugging and Tuning

You can log out the generated cypher statements with an environment variable:

DEBUG=neo4j-graphql-js node yourcode.js

This helps to debug and optimize your database statements. E.g. visit your Neo4J browser console at http://localhost:7474/browser/ and paste the following:

:params :params { offset: 0, first: 12, filter: {}, cypherParams: { currentUserId: '42' } }

and now profile the generated query:

EXPLAIN MATCH (`post`:`Post`) WITH `post` ORDER BY post.createdAt DESC RETURN `post` { .id , .title } AS `post`

You can learn more by typing:

:help EXPLAIN
:help params

About

NOTE: This project is no longer actively maintained. Please consider using the official Neo4j GraphQL Library (linked in README).

Topics

Resources

License

Stars

Watchers

Forks