質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

0回答

1275閲覧

express-graphqlでschemaの1fieldにあるargumentsにresolverからアクセスする方法について

yu-na

総合スコア27

GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2020/08/04 00:04

表題の通りなのですが、以下のようなgraphqlクエリをクライアントから発行します

query { users { id, name, pictures(first: 1) { id } } }

上記クエリでは、「ユーザーの一覧をそのユーザーがも所有する写真一覧と一緒に取得するが、写真は最初の1枚だけを抽出」を要求しております。

このリクエスト時の「forst: 1」は以下のように定義しております。

import { GraphQLObjectType, GraphQLString, GraphQLList, GraphQLInt } from "graphql"; import { PictureType } from "./picture.type"; class User { public name: string = 'user_schama'; public fields = () => { return { id: { type: GraphQLString }, name: { type: GraphQLString }, pictures: { type: GraphQLList(PictureType), args: { first!: { type: GraphQLInt }, last!: { type: GraphQLInt } } } } } } export const UserType = new GraphQLObjectType(new User());

上記スキーマは以下のようにresolverでreturnされます。

import { GraphQLList, GraphQLInt } from "graphql"; import { UserType } from "../types"; import { FakeDatabaseKeyType } from "../types/fakeDatabase.type"; import { GraphQLQuery } from "./query.interface"; export class UsersQuery implements GraphQLQuery { protected fakeDatabase: FakeDatabaseKeyType = {} constructor (fakeDatabase: FakeDatabaseKeyType) { this.fakeDatabase = fakeDatabase } public type = new GraphQLList(UserType); public description: string = "List of all Users"; public resolve = () => { // TODO userスキーマのpictureに指定したargs(firstとか)どうやって取得すんの? // 上記が解決したら、cursor、edge、nodeの実装に移る return Object.keys(this.fakeDatabase).map(id => { const fakeDatabase = this.fakeDatabase return { id, name: fakeDatabase[id].name, pictures: fakeDatabase[id].pictures } }) } }

typeに先ほどのusersスキーマが定義されてます。
これらは最終的に

class Query { public name = "Query"; public fields = () => { return { user: new UserQuery(fakeDatabase), users: new UsersQuery(fakeDatabase) } } } ... 省略 ... export const schema = new GraphQLSchema({ query: new GraphQLObjectType(new Query()), mutation: new GraphQLObjectType(new Mutation()) });

このような感じでqueryに設定しております。

上記の構成の場合、先の「first: 1」はresolverであるUsersQueryのresolveの中で取得したいのですが、どのように取得できますでしょうか?

GraphQLもexpress-graphqlも初学であり、そもそも勘違いしているなどもあるかもしれませんが、お知恵をお借りできればと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問