GraphQL, Redis, JWT 및 Sequelize와 관련된 Node.js 스타터 프로젝트

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. 이 프로젝트는 통합되고 확장 가능한 기능을 갖춘 최신 웹 애플리케이션을 즉시 개발할 수 있는 모듈식 구조를 가지고 있습니다.

? 프로젝트 개요

이 프로젝트는 데이터 캐싱에 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 파일을 생성하고 Redis, JWT데이터베이스에 대해 다음 구성을 추가합니다.

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"
로그인 후 복사

이렇게 하면 프로젝트 내에 구성, 모델 및 마이그레이션 디렉터리 구조가 생성됩니다. 다음으로 User, Post 등 애플리케이션에 필요한 모델을 생성하고 마이그레이션을 수행하여 데이터베이스에 테이블을 생성합니다.

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 Playground에 액세스하여 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/ 폴더에 있으며 프로덕션 서버에 배포할 준비가 됩니다.

클라우드 플랫폼 준비

이 프로젝트는 다음 단계에 따라 Heroku, AWS 또는 DigitalOcean과 같은 플랫폼에 배포할 수 있습니다.

  1. Git 저장소에 코드 푸시(GitHub, GitLab 등)
  2. 선택한 클라우드 플랫폼(Redis, JWT Secret, URL 데이터베이스)에 환경 변수를 설정합니다.
  3. 클라우드 플랫폼의 명령이나 통합을 사용하여 프로젝트를 배포하세요.

? 의지

  • GraphQL 문서
  • Redis 문서
  • JWT 문서
  • 문서화

위 단계를 따르면 이제 Redis, JWTSequelize를 사용하여 GraphQL API 애플리케이션을 실행하고 개발할 수 있습니다.

위 내용은 GraphQL, Redis, JWT 및 Sequelize와 관련된 Node.js 스타터 프로젝트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿