# HOW TO GRAPHQLでGraphQLの勉強をはじめました その⑦

# Connecting Server and Database with the Prisma Client

いよいよGraphQLサーバーからPrasma APIを使ってデータベースに接続していきます。

# Updating the resolver functions to use Prisma client

まずはちょっとしたクリーンアップとリファクタリングからはじめていきます。 index.jsからlinksという配列を削除して、idCound変数もなくしました。データはデータベースに保存されるので、不要になったということです。それに伴ってリゾルバも👇のように。

const resolvers = {
  Query: {
    info: () => `This is the API of a Hackernews Clone`,
    feed: (root, args, context, info) => {
      return context.prisma.links()
    },
  },
  Mutation: {
    post: (root, args, context) => {
      return context.prisma.createLin({
        url: args.url,
        description: args.description,
      })
    },
  },
}

# The context argument

いきなりでてきた context ですが、JapaScriptのプレーンなオブジェクトで、リゾルバチェーンの中にある全てのリゾルバが読み書き出来るもの。任意のデータを渡したりなんていう時に使える感じで、ServletContextとかに親しんだことのあるオジサン的にはとてもシンプルなものに感じました。笑

# Understanding the feed resolver

contextにあるprismaがPrisma APIを使ってCRUDオペレーションを出来る。

# Understanding the post resolver

feedと同様にpostもcontextのprismaクライアントを使う。データはargsパラメータで受け取る。 datamode.prismaから自動生成されるCRUD APIをprisma clientが叩くという仕組み。

# Attaching the generated Prisma client to context

では、どうやってPrismaクライアントがcontextにアタッチされるか?という話。

まずはyarnでprisma-client-libを追加します。

$ yarn add prisma-client-lib

次にindex.jsでprisma-clientをインポートします、と。

const { prisma } = require('./generated/prisma-client')

これでGraphQLサーバーがイニシャライズされるタイミングでcontextがアタッチされるようになりましたっていうのが👇。これによってリゾルバからcontext.prismaでアクセスできるのよ、と。

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: { prisma },
})

# Testing the new implementation

では、 node src/index.js をしてサーバーを起動してから、👇のようなmutationを発行してデータを追加します。

mutation

👇のようにPrisma Cloudのコンソールでデータが入っていることを確認できます。データは永続化されているのでnodeのサーバーを再起動してもデータが失われることはありません。

prisma console

このエントリーをはてなブックマークに追加

Algolia検索からの流入のみConversionボタン表示