web-dev-qa-db-ja.com

サーバーからGraphQLクエリを実行する方法

Graphql-expressを使用して、graphqlクエリを実行できるエンドポイントを作成しています。SQLデータベースでSequelizeを使用していますが、graphql resolve関数の外部でサーバーから直接使用するのは間違っていると感じています。で定義されたのと同じサーバーからgraphqlAPIをクエリするにはどうすればよいですか?

これが私が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
    }
  }
`)

このquery関数をどのように作成しますか?

14
Hoffmann

GraphQL.js それ自体はhttpサーバーを実行する必要はありません。 express-graphqlは、クエリリゾルバーをhttpエンドポイントにマウントするための単なるヘルパーです。

スキーマとクエリをgraphqlに渡すと、クエリをデータに解決するPromiseが返されます。

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);
})
19
Aᴍɪʀ

パラメータを使用してクエリ/ミューテーションを適切に実行するためのパターンを提供することにより、@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)

このように、文字列構築ビットを処理する必要はありません"または' あちこち。

2
Vincent Cantin