JWT Tutorial w/ Node.js, GraphQL, React
動画のまとめ
サーバ側
typeorm
とtype-graphql
を使うと、GraphQL の object type の作成と、ORM のモデル(エンティティー)の作成を、一つのクラス定義により行うことができる。
プロジェクトのセットアップ
npx typeorm init --name server --database postgres
- postgres で DB を手動作成
ormconfig.json
のユーザ名などを適宜編集yarn start
で自動的にテーブル等が作成される
graphql 関係
yarn add express apollo-server-express graphql type-graphql
yarn add -D @types/express @types/graphql
Resolver
// UserResolver.ts
import { Query, Resolver } from 'type-graphql';
@Resolver()
export class UserResolver {
@Query(() => String) // resolverにおいてquery typeの宣言も同時に行える
hello() {
return 'hi!';
}
}
// index.ts
import { buildSchema } from 'type-graphql';
const apolloServer = new ApolloServer({
schema: await buildSchema({
resolvers: [UserResolver],
}),
});
Mutation
yarn add bcryptjs
yarn add -D @types/bcryptjs
export class UserResolver {
@Mutation(() => Boolean) // 成功したかどうかを返す
async register(
@Arg('email') email: string, // クエリ時の引数名、格納する変数名と型
@Arg('password') password: string,
) {
const hashedPassword = await hash(password, 12);
try {
await User.insert({
email,
password: hashedPassword,
});
} catch (err) {
console.log(err);
return false;
}
return true;
}
}