Node.js スターター プロジェクトのデンガン GraphQL、Redis、JWT、および Sequelize

Patricia Arquette
リリース: 2024-11-13 01:56:02
オリジナル
333 人が閲覧しました

Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize

このテンプレートは、API 用の GraphQL、キャッシュおよび一時用の Redis で事前構成された Node.js スターター プロジェクト を提供します。データ ストレージ、認証と認可のための JWT、およびPostgreSQL や MySQL などのリレーショナル データベースに接続された ORM の Sequelize。このプロジェクトはモジュール構造になっており、統合されたスケーラブルな機能を備えた最新の Web アプリケーションを即座に開発できます。

?プロジェクト概要

このプロジェクトは、データ キャッシュに Redis を使用し、API を保護するために JWT を使用する GraphQL API を使用したバックエンド アプリケーションの開発を容易にするように設計されています。 Sequelize は、リレーショナル データベースとの対話を容易にする ORM として使用されます。さらに、認証、検証、ロギングの処理を容易にするミドルウェアがあります。

主な特長

  • GraphQL API により柔軟かつ効率的なクエリとデータ変更
  • JWT 認証: 安全なトークンベースの認証
  • データのキャッシュとアプリケーションのパフォーマンスの向上のための Redis
  • リレーショナル データベース管理用の ORM を Sequelize
  • 一元的な認可とリクエスト処理のためのミドルウェア
  • モジュール式で適切に構造化されているにより、拡張性があり、メンテナンスが容易です

⁉️使用されるテクノロジー

  • Node.js: JavaScript を使用してサーバー側アプリケーションを構築するためのプラットフォーム。もっと詳しく知る
  • GraphQL: 効率的かつ柔軟なデータ取得を可能にする API のクエリ言語。もっと詳しく知る
  • Redis: キャッシュやメッセージ ブローカーによく使用される一時データ ストレージ (メモリ内)。もっと詳しく知る
  • JWT: 安全でシンプルなトークンベースの認証テクノロジー。もっと詳しく知る
  • Sequelize: PostgreSQL、MySQL、およびその他のリレーショナル データベースをサポートする Node.js 用の ORM。もっと詳しく知る

?プロジェクトを設定して実行する手順

1. リポジトリのクローンを作成します

まず、このテンプレート リポジトリのクローンをローカル マシンに作成します。

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
ログイン後にコピー
ログイン後にコピー

最初から始める場合は、次のコマンドを使用して新しいプロジェクトを初期化します。

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
ログイン後にコピー
ログイン後にコピー

2. 依存関係のインストール

リポジトリのクローンを作成するか、新しいプロジェクトを作成した後、コマンドを実行して必要な依存関係をインストールします。

mkdir blog-api
cd blog-api
npm init -y
ログイン後にコピー

これにより、package.json ファイルにリストされているすべての依存関係がインストールされます。


3. 環境構成

プロジェクトのルート ディレクトリに .env ファイルを作成し、RedisJWT、および Database の次の構成を追加します。

yarn install
ログイン後にコピー

データベース構成に従ってユーザー、パスワード、mydatabase を変更します。


4. Sequelize を使用したデータベースの準備

データベースが構成されていない場合は、コマンドを実行して Sequelize を初期化し、モデルを作成します。

DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"
ログイン後にコピー

これにより、プロジェクト内に config、models、migrations のディレクトリ構造が作成されます。次に、UserPost などのアプリケーションに必要なモデルを作成し、移行を実行してデータベースにテーブルを作成します。

yarn sequelize init
ログイン後にコピー

データベースが実行されていることを確認してください (たとえば、PostgreSQL または MySQL を使用している)。


5. GraphQL サーバーのセットアップ

Apollo Server と GraphQL の依存関係をインストールします:

yarn sequelize db:migrate
ログイン後にコピー

その後、GraphQL サーバー構成ファイル、スキーマ、リゾルバーを作成します。 GraphQL サーバーは次の方法で設定できます:

src/server.ts

yarn add apollo-server graphql
ログイン後にコピー

src/graphql/schema.ts

クエリとミューテーション用の 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');
});
ログイン後にコピー

src/graphql/resolvers.ts

クエリとミューテーションのリゾルバーを実装します:

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
  }
`;
ログイン後にコピー

6. 開発用サーバーの実行

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/ フォルダーに保存され、運用サーバーにデプロイする準備が整います。

クラウドプラットフォームの準備

このプロジェクトは、次の手順で HerakuAWSDigitalOcean などのプラットフォームにデプロイできます。

  1. コードを Git リポジトリにプッシュします (GitHub、GitLab など)。
  2. 選択したクラウド プラットフォーム (Redis、JWT シークレット、URL データベース) で 環境変数を設定します
  3. コマンドまたはクラウド プラットフォームからの統合を使用して、プロジェクトをデプロイします

?リソース

  • GraphQL ドキュメント
  • Redis ドキュメント
  • JWT ドキュメント
  • ドキュメントを続行する

上記の手順に従うことで、RedisJWT、および Sequelize を使用して GraphQL API アプリケーションを実行および開発できるようになります。

以上がNode.js スターター プロジェクトのデンガン GraphQL、Redis、JWT、および Sequelizeの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート