🙆‍♀️

Apollo serverで、DB Session 使用的な例

2021/06/27に公開

概要:

Apollo serverで、DBセッションを使う例となります。

  • User IDを使う例で、ログイン前は別のファイルセッションを使う形となります。
  • mongoDBに、読み書きする例です
  • クライアントのテストは、React + apollo clientで行いました

環境

  • Apollo Server
  • node 14
  • mongoDB

参考のコード

https://github.com/kuc-arc-f/apollo_server_head


GraphQL

  • 部分的な説明になりますが。session周辺の実装を記載します

  • session定義

src/scheme.js

scheme.js
  type Session {
    id: String
    user_id: String
    key: String
    value: String
  }  

  • query : user_id, keyを指定

src/query.js

query.js
session(user_id: String, key: String): Session

  • mutaion : 追加、削除

src/mutation.js

mutation.js
addSession(user_id: String!, key: String, value: String!): Session
deleteSession(user_id: String!, key: String): Session

  • resolvers の追加

src/index.js

index.js
const resolvers = {
  Query: {
    async session(parent, args, context, info){
      return await LibSession.get_item(args);
    },
  },
  Mutation: {
    addSession: async (parent, args, context) => {
      var ret = await LibSession.add_item(args)
      return ret
    },
    deleteSession: async (parent, args, context) => {
      var ret = await LibSession.delete_uid(args.user_id, args.key)
      return ret
    },

  }
};


  • テストのGraphQL: GET、追加、削除を準備

  • get

query {
  session(user_id: "60d67fb70160bf019dfe8169", key: "key9"){
    id
    key
    value
  }
}
  • set : DBに値が追加されます。
mutation add {
  addSession( user_id: "60d67fb70160bf019dfe8169", key: "key9",
   value: "hoge"
  ) {
    id
  }
}
  • delete
mutation delete {
  deleteSession(user_id: "60d67fb70160bf019dfe8169", key: "key9") {
    id
  }
}

....

Discussion