# 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を発行してデータを追加します。
👇のようにPrisma Cloudのコンソールでデータが入っていることを確認できます。データは永続化されているのでnodeのサーバーを再起動してもデータが失われることはありません。