javascriptgraphqlgraphql-js

How to execute GraphQL query from server


I am using graphql-express to create an endpoint where I can execute graphql queries in. Although I am using Sequelize with a SQL database it feels wrong to use it directly from the server outside of my graphql resolve functions. How do I go about querying my graphql API from the same server as it was defined in?

This is how I set up my graphql endpoint:

const express = require('express');
const router = express.Router();
const graphqlHTTP = require('express-graphql');
const gqlOptions = {
   schema: require('./schema')
};
router.use('/', graphqlHTTP(gqlOptions));

modules.exports = router;

Basically what I want is to be able to do something like this:

query(`
  {
    user(id: ${id}) {
      name
    }
  }
`)

How would I create this query function?


Solution

  • GraphQL.js itself does not require a http server to run. express-graphql is just a helper to mount the query resolver to a http endpoint.

    You can pass your schema and the query to graphql, it'll return a Promise that'll resolve the query to the data.

    graphql({schema, requestString}).then(result => {
      console.log(result);
    });
    

    So:

    const {graphql} = require('graphql');
    const schema = require('./schema');
    function query (requestString) {
      return graphql({schema, requestString});
    }
    
    query(`
      {
        user(id: ${id}) {
          name
        }
      }
    `).then(data => {
      console.log(data);
    })