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
関数をどのように作成しますか?
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);
})
パラメータを使用してクエリ/ミューテーションを適切に実行するためのパターンを提供することにより、@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)
このように、文字列構築ビットを処理する必要はありません"
または'
あちこち。