このテンプレートは、API 用の GraphQL、キャッシュおよび一時用の Redis で事前構成された Node.js スターター プロジェクト を提供します。データ ストレージ、認証と認可のための JWT、およびPostgreSQL や MySQL などのリレーショナル データベースに接続された ORM の Sequelize。このプロジェクトはモジュール構造になっており、統合されたスケーラブルな機能を備えた最新の Web アプリケーションを即座に開発できます。
このプロジェクトは、データ キャッシュに Redis を使用し、API を保護するために JWT を使用する GraphQL API を使用したバックエンド アプリケーションの開発を容易にするように設計されています。 Sequelize は、リレーショナル データベースとの対話を容易にする ORM として使用されます。さらに、認証、検証、ロギングの処理を容易にするミドルウェアがあります。
まず、このテンプレート リポジトリのクローンをローカル マシンに作成します。
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
最初から始める場合は、次のコマンドを使用して新しいプロジェクトを初期化します。
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
リポジトリのクローンを作成するか、新しいプロジェクトを作成した後、コマンドを実行して必要な依存関係をインストールします。
mkdir blog-api cd blog-api npm init -y
これにより、package.json ファイルにリストされているすべての依存関係がインストールされます。
プロジェクトのルート ディレクトリに .env ファイルを作成し、Redis、JWT、および Database の次の構成を追加します。
yarn install
データベース構成に従ってユーザー、パスワード、mydatabase を変更します。
データベースが構成されていない場合は、コマンドを実行して Sequelize を初期化し、モデルを作成します。
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
これにより、プロジェクト内に config、models、migrations のディレクトリ構造が作成されます。次に、User や Post などのアプリケーションに必要なモデルを作成し、移行を実行してデータベースにテーブルを作成します。
yarn sequelize init
データベースが実行されていることを確認してください (たとえば、PostgreSQL または MySQL を使用している)。
Apollo Server と GraphQL の依存関係をインストールします:
yarn sequelize db:migrate
その後、GraphQL サーバー構成ファイル、スキーマ、リゾルバーを作成します。 GraphQL サーバーは次の方法で設定できます:
yarn add apollo-server graphql
クエリとミューテーション用の GraphQL スキーマを定義します:
import { ApolloServer } from 'apollo-server-express'; import express from 'express'; import { typeDefs, resolvers } from './graphql'; import { authenticateJWT } from './middlewares/auth'; import { sequelize } from './config/database'; const app = express(); // Gunakan middleware JWT app.use(authenticateJWT); // Inisialisasi Apollo Server const server = new ApolloServer({ typeDefs, resolvers, context: ({ req }) => ({ user: req.user }), }); server.applyMiddleware({ app }); const PORT = process.env.PORT || 4000; app.listen(PORT, async () => { console.log(`Server running at http://localhost:${PORT}${server.graphqlPath}`); await sequelize.authenticate(); console.log('Database connected'); });
クエリとミューテーションのリゾルバーを実装します:
import { gql } from 'apollo-server-express'; export const typeDefs = gql` type User { id: ID! username: String! } type Post { id: ID! title: String! content: String! user: User! } type Query { posts: [Post] post(id: ID!): Post users: [User] } type Mutation { createPost(title: String!, content: String!): Post register(username: String!, password: String!): User login(username: String!, password: String!): String # JWT token } `;
hot-reload を使用して開発環境でサーバーを実行するには、次のコマンドを使用します。
import { Post, User } from '../models'; import jwt from 'jsonwebtoken'; import bcrypt from 'bcryptjs'; export const resolvers = { Query: { posts: () => Post.findAll(), post: (_, { id }) => Post.findByPk(id), users: () => User.findAll(), }, Mutation: { createPost: async (_, { title, content }, { user }) => { if (!user) throw new Error('Authentication required'); const post = await Post.create({ title, content, userId: user.id }); return post; }, register: async (_, { username, password }) => { const hashedPassword = await bcrypt.hash(password, 10); const user = await User.create({ username, password: hashedPassword }); return user; }, login: async (_, { username, password }) => { const user = await User.findOne({ where: { username } }); if (!user) throw new Error('User not found'); const match = await bcrypt.compare(password, user.password); if (!match) throw new Error('Invalid password'); const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' }); return token; }, }, };
サーバーは http://localhost:4000 で実行され、GraphQL プレイグラウンド にアクセスして API クエリと変更をテストできます。
このプロジェクト ディレクトリ構造は、アプリケーションのさまざまな部分を分離して、よりモジュール化して保守しやすくするように設計されています。
yarn dev
実稼働用にプロジェクトを準備するには、次のコマンドを使用して TypeScript を JavaScript にビルドします。
/myapp ├── src │ ├── middlewares # Berisi middleware untuk otentikasi (JWT), caching (Redis), dan validasi │ ├── routes # Definisi endpoint API dan resolver GraphQL │ ├── services # Logika bisnis utama dan pengolahan data │ ├── app.ts # File utama untuk inisialisasi aplikasi dan middleware │ ├── graphql # Menyimpan konfigurasi GraphQL, schema, dan resolvers │ ├── models # Model Sequelize untuk mengelola database relasional │ ├── config # File konfigurasi global untuk Redis, JWT, database, dll │ ├── index.ts # Entry point aplikasi, menginisialisasi server dan middleware │ ├── resolvers # Berisi resolver GraphQL untuk query dan mutasi │ ├── server.ts # File untuk setup Apollo Server dan konfigurasi GraphQL │ ├── schema # Definisi schema GraphQL │ ├── types # TypeScript types dan interfaces untuk GraphQL dan lainnya │ └── utils # Berisi helper dan fungsi utility ├── .env # File konfigurasi environment (Redis, JWT Secret, Database URL) ├── package.json # Metadata proyek dan dependensi └── tsconfig.json # Konfigurasi TypeScript
出力は dist/ フォルダーに保存され、運用サーバーにデプロイする準備が整います。
このプロジェクトは、次の手順で Heraku、AWS、DigitalOcean などのプラットフォームにデプロイできます。
上記の手順に従うことで、Redis、JWT、および Sequelize を使用して GraphQL API アプリケーションを実行および開発できるようになります。
以上がNode.js スターター プロジェクトのデンガン GraphQL、Redis、JWT、および Sequelizeの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。