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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1625閲覧

【Type Graphql】updateしようとするも、エラーがでてupdateできない。

tonkotsu_ramen

総合スコア6

GraphQL

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/08/31 11:39

現状

graphql初心者です。現在、下記のリンク記事の手順に従って学習しております。
https://qiita.com/koinori/items/17272aee571b15d4611e

とりあえずApollo + Sequelize + TypeGraphQLを使って、APIは構築できました。
構築したAPIでquery(参照)とmutation(create)は、問題なく実行できたのですが、updateだけエラーがでており、できていない。

実現したいこと

エラーを解決し、データの更新をできるようにし、graphqlAPIを構築したい。
クエリパラメータにidが渡っていないとは思うのですが、どう記述したらよいかわかっていないです。
まだまだ、graphqlについてわかっていないことが多いので、アドバイス含めご意見いただけますと幸いです。

コード

クエリ

mutation updateUser ($userInput: UpdateUserInput) { updateUser(data: $userInput) { id username password } } // query viriables { "userInput":{"id": 1, "username": "suzuki", "password”:”password”} }
// エラーメッセージ { "error": { "errors": [ { "message": "Variable \"$userInput\" of type \"UpdateUserInput\" used in position expecting type \"UpdateUserInput!\".", "locations": [ { "line": 1, "column": 21 }, { "line": 2, "column": 20 } ], "extensions": { "code": "GRAPHQL_VALIDATION_FAILED", "exception": { "stacktrace": [ "GraphQLError: Variable \"$userInput\" of type \"UpdateUserInput\" used in position expecting type \"UpdateUserInput!\".", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/validation/rules/VariablesInAllowedPosition.js:59:35)", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:345:29)", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:395:21)", " at visit (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:242:26)", " at Object.validate (/Users/iraira/mil/typegraphql/node_modules/graphql/validation/validate.js:73:24)", " at validate (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:233:34)", " at Object.<anonymous> (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:119:42)", " at Generator.next (<anonymous>)", " at fulfilled (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:5:58)", " at processTicksAndRejections (internal/process/task_queues.js:95:5)" ] } } } ] } }

typescript

1// リゾルバー 2// resolvers/user.ts 3import { 4 Resolver, 5 Query, 6 InputType, 7 Field, 8 Arg, 9 Ctx, 10 Mutation, 11} from "type-graphql"; 12import { User } from "../models/user"; 13import { Context } from "apollo-server-core"; 14 15@InputType({ description: "New User Argument" }) 16class AddUserInput implements Partial<User> { 17 @Field() 18 username!: string; 19 @Field() 20 password!: string; 21} 22 23@InputType({ description: "Update User Argument" }) 24class UpdateUserInput implements Partial<User> { 25 @Field() 26 id!: string; 27 @Field() 28 username!: string; 29 @Field() 30 password!: string; 31} 32 33@Resolver() 34export class AppResolver { 35 @Query((returns) => User, { nullable: true }) 36 async user(@Arg("id") id: string): Promise<User | null> { 37 return User.findByPk(id); 38 } 39 40 @Mutation((returns) => User) 41 async addUser( 42 @Arg("data") newUser: AddUserInput, 43 @Ctx() ctx: Context 44 ): Promise<User> { 45 return User.create(newUser); 46 } 47 48 @Mutation((returns) => User!) 49 async updateUser( 50 @Arg("data") updateUser: UpdateUserInput, 51 @Ctx() ctx: Context 52 ): Promise<User | null> { 53 return User.update(updateUser, { 54 where: { 55 id: updateUser.id, 56 }, 57 }).then((res) => { 58 console.log(res); 59 return User.findByPk(updateUser.id); 60 }); 61 } 62}

typescript

1// スキーマ 2// models/user.ts 3import { ObjectType, Field, ID } from "type-graphql"; 4import { Model, UUID, UUIDV1, STRING } from "sequelize"; 5import { sequelize } from "../db/conf"; 6 7@ObjectType() 8export class User extends Model { 9 @Field((type) => ID) 10 public id!: string; 11 @Field() 12 public username!: string; 13 @Field() 14 public password!: string; 15} 16 17User.init( 18 { 19 id: { 20 type: UUID, 21 defaultValue: UUIDV1, 22 allowNull: false, 23 primaryKey: true, 24 }, 25 username: { 26 type: STRING, 27 allowNull: false, 28 }, 29 password: { 30 type: STRING, 31 allowNull: false, 32 }, 33 }, 34 { 35 sequelize, 36 modelName: "user", 37 } 38); 39

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

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

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

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

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

guest

回答1

0

自己解決

Apolloの画面に書くスキーマに対する必要な引数を表示してくれてました。

mutation update($input: UpdateUserInput!){ updateUser(data:$input){ id username password } } クエリ変数 { "input": {"id": "1","username": “yamada”,”password": “password”} }

投稿2021/09/02 05:09

tonkotsu_ramen

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問