Этот шаблон предоставляет Начальный проект Node.js, настроенный с помощью GraphQL для API, Redis для кэширование и временное хранение данных, JWT для аутентификации и авторизации и Sequelize для ORM который подключается к реляционной базе данных, такой как PostgreSQL или MySQL. Проект имеет модульную структуру, позволяющую мгновенно разрабатывать современные веб-приложения с интегрированными и масштабируемыми функциями.
Этот проект призван упростить разработку серверных приложений с помощью GraphQL API, который использует Redis для кэширования данных и JWT для защиты API. Sequelize используется в качестве ORM для облегчения взаимодействия с реляционными базами данных. Кроме того, существует промежуточное программное обеспечение, которое упрощает аутентификацию, проверку и ведение журнала.
Прежде всего клонируйте этот репозиторий шаблонов на свой локальный компьютер:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
Если вы начинаете с нуля, инициализируйте новый проект с помощью:
mkdir blog-api cd blog-api npm init -y
После клонирования репозитория или создания нового проекта выполните команду для установки необходимых зависимостей:
yarn install
При этом будут установлены все зависимости, перечисленные в файле package.json.
Создайте файл .env в корневом каталоге проекта и добавьте следующие конфигурации для Redis, JWT и Database:
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
Измените пользователя, пароль и мою базу данных в соответствии с конфигурацией вашей базы данных.
Если у вас не настроена база данных, запустите команду для инициализации Sequelize и создания модели:
yarn sequelize init
Это создаст структуру каталогов конфигурации, моделей и миграций в вашем проекте. Далее создайте необходимые модели для приложения, такие как Пользователь и Пост, и выполните миграцию для создания таблиц в базе данных.
yarn sequelize db:migrate
Убедитесь, что база данных работает (например, с использованием PostgreSQL или MySQL).
Установить зависимости для Apollo Server и GraphQL:
yarn add apollo-server graphql
После этого создайте файл конфигурации сервера 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'); });
Определите схему 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 } `;
Реализовать преобразователи для запросов и мутаций:
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; }, }, };
Чтобы запустить сервер в среде разработки с горячей перезагрузкой, используйте следующую команду:
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, выполнив следующие действия:
Следуя описанным выше шагам, теперь вы можете запускать и разрабатывать приложения GraphQL API с использованием Redis, JWT и Sequelize.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3