«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Стартовый проект Node.js с GraphQL, Redis, JWT и Sequelize

Стартовый проект Node.js с GraphQL, Redis, JWT и Sequelize

Опубликовано 22 декабря 2024 г.
Просматривать:984

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

Этот шаблон предоставляет Начальный проект Node.js, настроенный с помощью GraphQL для API, Redis для кэширование и временное хранение данных, JWT для аутентификации и авторизации и Sequelize для ORM который подключается к реляционной базе данных, такой как PostgreSQL или MySQL. Проект имеет модульную структуру, позволяющую мгновенно разрабатывать современные веб-приложения с интегрированными и масштабируемыми функциями.

? Обзор проекта

Этот проект призван упростить разработку серверных приложений с помощью GraphQL API, который использует Redis для кэширования данных и JWT для защиты API. Sequelize используется в качестве ORM для облегчения взаимодействия с реляционными базами данных. Кроме того, существует промежуточное программное обеспечение, которое упрощает аутентификацию, проверку и ведение журнала.

Ключевые особенности

  • GraphQL API для более гибких и эффективных запросов и изменения данных
  • Аутентификация JWT для безопасной аутентификации на основе токенов
  • Redis для кэширования данных и повышения производительности приложений
  • Секвелизация ORM для управления реляционными базами данных
  • Промежуточное ПО для централизованной авторизации и обработки запросов
  • Модульная и хорошо структурированная для масштабируемости и упрощения обслуживания

?️ Используемая технология

  • Node.js: платформа для создания серверных приложений с использованием JavaScript. Узнать больше
  • GraphQL: язык запросов для API, обеспечивающий эффективный и гибкий поиск данных. Узнать больше
  • Redis: временное хранилище данных (в памяти), которое часто используется для кэширования и обмена сообщениями. Узнать больше
  • JWT: безопасная и простая технология аутентификации на основе токенов. Узнать больше
  • Sequelize: ORM для Node.js, поддерживающий PostgreSQL, MySQL и другие реляционные базы данных. Узнать больше

? Шаги по настройке и запуску проекта

1. Репозиторий клонов

Прежде всего клонируйте этот репозиторий шаблонов на свой локальный компьютер:

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api

Если вы начинаете с нуля, инициализируйте новый проект с помощью:

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

2. Установка зависимостей

После клонирования репозитория или создания нового проекта выполните команду для установки необходимых зависимостей:

yarn install

При этом будут установлены все зависимости, перечисленные в файле package.json.


3. Конфигурация среды

Создайте файл .env в корневом каталоге проекта и добавьте следующие конфигурации для Redis, JWT и Database:

DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"

Измените пользователя, пароль и мою базу данных в соответствии с конфигурацией вашей базы данных.


4. Подготовка базы данных с помощью Sequelize

Если у вас не настроена база данных, запустите команду для инициализации Sequelize и создания модели:

yarn sequelize init

Это создаст структуру каталогов конфигурации, моделей и миграций в вашем проекте. Далее создайте необходимые модели для приложения, такие как Пользователь и Пост, и выполните миграцию для создания таблиц в базе данных.

yarn sequelize db:migrate

Убедитесь, что база данных работает (например, с использованием PostgreSQL или MySQL).


5. Настройка сервера GraphQL

Установить зависимости для Apollo Server и GraphQL:

yarn add apollo-server graphql

После этого создайте файл конфигурации сервера GraphQL, схему и преобразователи. Вы можете настроить сервер GraphQL следующим образом:

источник/server.ts

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/schema.ts

Определите схему GraphQL для запросов и мутаций:

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
  }
`;

src/graphql/resolvers.ts

Реализовать преобразователи для запросов и мутаций:

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;
    },
  },
};

6. Запуск сервера для разработки

Чтобы запустить сервер в среде разработки с горячей перезагрузкой, используйте следующую команду:

yarn dev

Сервер будет работать по адресу http://localhost:4000, и вы сможете получить доступ к GraphQL Playground для тестирования запросов и мутаций API.


? Структура каталога проекта

Эта структура каталогов проекта предназначена для разделения различных частей приложения, чтобы сделать его более модульным и простым в обслуживании:

/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:

yarn build

Выходные данные будут находиться в папке dist/ и готовы к развертыванию на рабочем сервере.

Подготовка к облачным платформам

Этот проект можно развернуть на таких платформах, как Heroku, AWS или DigitalOcean, выполнив следующие действия:

  1. Отправить код в репозиторий Git (GitHub, GitLab или другой).
  2. Задайте переменные среды на выбранной облачной платформе (Redis, JWT Secret, база данных URL).
  3. Разверните проект с помощью команд или интеграций облачной платформы.

? Ресурс

  • Документация GraphQL
  • Документация Redis
  • Документация JWT
  • Секвелизация документации

Следуя описанным выше шагам, теперь вы можете запускать и разрабатывать приложения GraphQL API с использованием Redis, JWT и Sequelize.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/dioarafi/nodejs-starter-project-dengan-graphql-redis-jwt-dan-sequelize-2l3i?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3