Как выполнить запрос GraphQL с сервера

Я использую graphql-express для создания конечной точки, где я могу выполнять запросы graphql. Хотя я использую Sequelize с базой данных SQL, неправильно использовать ее непосредственно с сервера за пределами моего graphql resolve функции. Как я могу запросить API graphql с того же сервера, на котором он был определен?

вот как я настраиваю конечную точку graphql:

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;

в основном то, что я хочу, это иметь возможность делать что-то вроде это:

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

как бы я это создал ?

2 ответов


GraphQL.js сам по себе не требует запуска http-сервера. express-graphql - это просто помощник для подключения распознавателя запросов к конечной точке http.

вы можете передать свою схему и запрос в graphql, он вернет обещание, которое разрешит запрос к данным.

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

Так:

const {graphql} = require('graphql');
const schema = require('./schema');
function query (str) {
  return graphql(schema, str);
}

query(`
  {
    user(id: ${id}) {
      name
    }
  }
`).then(data => {
  console.log(data);
})

Я хотел бы завершить ответ от @aᴍɪʀ, предоставив шаблон для правильного выполнения запроса / мутации с параметрами:

const params = {
  username: 'john',
  password: 'hello, world!',
  userData: {
    ...
  }
}

query(`mutation createUser(
          $username: String!,
          $password: String!,
          $userData: UserInput) {
  createUserWithPassword(
    username: $username,
    password: $password,
    userData: $userData) {
    id
    name {
      familyName
      givenName
    }
  }
}`, params)

таким образом, вам не нужно иметь дело с битами Строковой конструкции " или ' здесь и там.