「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Node.js スターター プロジェクトのデンガン GraphQL、Redis、JWT、および Sequelize

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

2024 年 12 月 22 日に公開
ブラウズ:895

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

このテンプレートは、API に GraphQLRedis で構成された Node.js スターター プロジェクトを提供します。キャッシュと一時データ ストレージ、認証と認可用の JWT、ORM 用の Sequelize PostgreSQL や MySQL などのリレーショナル データベースに接続します。このプロジェクトはモジュール構造になっており、統合されたスケーラブルな機能を備えた最新の 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 クローン https://gitlab.com/dioarafi1/graphify-api.git cd グラフィファイ API

最初から始める場合は、次のコマンドを使用して新しいプロジェクトを初期化します。
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api

mkdir ブログ API ブログ API CD npm init -y

2.
mkdir blog-api
cd blog-api
npm init -y

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

糸のインストール

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

3.

環境設定

プロジェクトのルート ディレクトリに .env ファイルを作成し、Redis

JWT、および Database: の次の構成を追加します。 DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="ローカルホスト" REDIS_PORT="6379"

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

4.

Sequelize によるデータベースの準備

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

yarn 続編初期化

これにより、プロジェクト内に config、models、migrations ディレクトリ構造が作成されます。次に、
yarn sequelize init

Post などのアプリケーションに必要なモデルを作成し、移行を実行してデータベースにテーブルを作成します。 糸の続編 db:移行

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

5.

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

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

糸で apollo-servergraphql を追加

その後、GraphQLサーバー設定ファイル、スキーマ、リゾルバーを作成します。 GraphQL サーバーは次の方法で設定できます:
yarn add apollo-server graphql
src/server.ts

import { ApolloServer } から 'apollo-server-express'; 「express」からエクスプレスをインポートします。 import { typeDefs、リゾルバ } から './graphql'; import {authenticateJWT} から './middlewares/auth'; import { sequelize } から './config/database'; const app = Express(); // JWTミドルウェアを使用する app.use(authenticateJWT); // Apollo サーバーを初期化します const サーバー = 新しい ApolloServer({ typeDefs、 リゾルバー、 コンテキスト: ({ req }) => ({ user: req.user })、 }); server.applyMiddleware({ アプリ }); const PORT = プロセス.env.PORT || 4000; app.listen(PORT, async () => { console.log(`http://localhost:${PORT}${server.graphqlPath}で実行されているサーバー`); sequelize.authenticate() を待ちます。 console.log('データベース接続'); });

src/graphql/schema.ts
yarn add apollo-server graphql
クエリとミューテーション用の GraphQL スキーマを定義します:

import { gql } から 'apollo-server-express'; エクスポート const typeDefs = gql` ユーザーを入力 { ID: ID! ユーザー名: 文字列! } 投稿タイプ { ID: ID! タイトル:ストリングス! 内容:文字列! ユーザー: ユーザー! } タイプ クエリ { 投稿: [投稿] post(id:ID!):投稿 ユーザー: [ユーザー] } タイプ突然変異 { createPost(タイトル:文字列!、内容:文字列!):投稿 register(ユーザー名: String!、パスワード: String!): ユーザー login(ユーザー名: String!、パスワード: String!): String # JWT トークン } `;

src/graphql/resolvers.ts
yarn add apollo-server graphql
クエリとミューテーションのリゾルバーを実装します:

import { Post, User } from '../models'; 「jsonwebtoken」から jwt をインポートします。 「bcryptjs」から bcrypt をインポートします。 エクスポート const リゾルバー = { クエリ: { 投稿: () => Post.findAll(), 投稿: (_, { id }) => Post.findByPk(id), ユーザー: () => User.findAll(), }、 突然変異: { createPost: async (_, { タイトル, コンテンツ }, { ユーザー }) => { if (!user) throw new Error('Authentication required'); const post = await Post.create({ title, content, userId: user.id }); 返却ポスト。 }、 登録: async (_, { ユーザー名, パスワード }) => { const hashedPassword = await bcrypt.hash(パスワード, 10); const user = await User.create({ ユーザー名, パスワード: hashedPassword }); リターンユーザー。 }、 ログイン: async (_, { ユーザー名, パスワード }) => { const user = await User.findOne({ ここで: { ユーザー名 } }); if (!user) throw new Error('ユーザーが見つかりません'); const match = await bcrypt.compare(password, user.password); if (!match) throw new Error('無効なパスワード'); const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, {expiresIn: '1h' }); トークンを返す。 }、 }、 };

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;
    },
  },
};
開発用サーバーの実行

hot-reload

を使用して開発環境でサーバーを実行するには、次のコマンドを使用します:

糸開発

サーバーは http://localhost:4000 で実行され、
yarn dev
にアクセスして API クエリとミューテーションをテストできます。

?プロジェクトのディレクトリ構造


このプロジェクト ディレクトリ構造は、アプリケーションのさまざまな部分を分離して、よりモジュール化して保守しやすくするように設計されています:

/myapp §── ソース │ §── ミドルウェア # 認証 (JWT)、キャッシュ (Redis)、および検証のためのミドルウェアが含まれています │ §── ルート # GraphQL API エンドポイントとリゾルバーの定義 │ §── サービス # 主要なビジネスロジックとデータ処理 │ §── app.ts # アプリケーションおよびミドルウェア初期化用のメインファイル │ §──graphql # GraphQL の設定、スキーマ、リゾルバーを保存します │ §── モデル # リレーショナル データベースを管理するためのモデルをシーケンス化する │ §── config # Redis、JWT、データベースなどのグローバル設定ファイル │ §──index.ts # アプリケーションのエントリポイント、サーバーとミドルウェアの初期化 │ §── リゾルバー # クエリとミューテーション用の GraphQL リゾルバーが含まれています │ §──server.ts # Apollo Server のセットアップと GraphQL 設定用のファイル │ §── schema # GraphQL スキーマ定義 │ §── タイプ # GraphQL などの TypeScript タイプとインターフェイス │ └── utils # ヘルパー関数とユーティリティ関数が含まれています §── .env # 環境設定ファイル (Redis、JWT シークレット、データベース URL) §── package.json # プロジェクトのメタデータと依存関係 ━── tsconfig.json # TypeScript の設定

/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

実稼働用にプロジェクトを準備するには、次のコマンドを使用して TypeScript を JavaScript にビルドします:

糸のビルド

出力は dist/ フォルダーに保存され、運用サーバーにデプロイする準備が整います。
yarn add apollo-server graphql
クラウドプラットフォームの準備

このプロジェクトは、次の手順で

Heraku

AWSDigitalOcean などのプラットフォームにデプロイできます。

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

GraphQL ドキュメント

Redis ドキュメント
  • JWT ドキュメント
  • ドキュメントの続きを作成
  • 上記の手順に従うことで、
  • Redis

JWT

、および Sequelize を使用して GraphQL API アプリケーションを実行および開発できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/dioarafi/nodejs-starter-project-dengan-graphql-redis-jwt-dan-sequelize-2l3i?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3