"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Node.js Starter Project مع GraphQL وRedis وJWT وSequelize

Node.js Starter Project مع GraphQL وRedis وJWT وSequelize

تم النشر بتاريخ 2024-12-22
تصفح:754

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

يوفر هذا القالب مشروع Node.js Starter الذي تم تكوينه باستخدام GraphQL لـ API، Redis لـ التخزين المؤقت وتخزين البيانات المؤقتة، JWT للمصادقة والترخيص، وSequelize لـ ORM التي تتصل بقاعدة بيانات علائقية مثل PostgreSQL أو MySQL. يحتوي المشروع على هيكل معياري يسمح لك بالتطوير الفوري لتطبيقات الويب الحديثة بميزات متكاملة وقابلة للتطوير.

؟ نظرة عامة على المشروع

تم تصميم هذا المشروع لتسهيل تطوير تطبيقات الواجهة الخلفية باستخدام واجهة برمجة التطبيقات GraphQL التي تستخدم Redis للتخزين المؤقت للبيانات وJWT لتأمين واجهة برمجة التطبيقات. Sequelize يستخدم كـ ORM لتسهيل التفاعل مع قواعد البيانات العلائقية. بالإضافة إلى ذلك، هناك برامج وسيطة تسهل التعامل مع المصادقة والتحقق والتسجيل.

الميزات الرئيسية

  • GraphQL API لمزيد من المرونة والفعالية في الاستعلام وتحويل البيانات
  • مصادقة JWT للمصادقة الآمنة المستندة إلى الرمز المميز
  • Redis للتخزين المؤقت للبيانات وتحسين أداء التطبيق
  • Sequelize ORM لإدارة قواعد البيانات العلائقية
  • البرامج الوسيطة للترخيص المركزي ومعالجة الطلبات
  • وحدات نمطية ومنظمة بشكل جيد لقابلية التوسع وسهولة الصيانة

⁉️ التكنولوجيا المستخدمة

  • Node.js: منصة لبناء تطبيقات من جانب الخادم باستخدام JavaScript. يتعلم أكثر
  • GraphQL: لغة الاستعلام لواجهات برمجة التطبيقات التي تتيح استرجاع البيانات بكفاءة ومرونة. يتعلم أكثر
  • 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_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"

قم بتغيير المستخدم وكلمة المرور وقاعدة البيانات الخاصة بي وفقًا لتكوين قاعدة البيانات الخاصة بك.


4. تحضير قاعدة البيانات بالتسلسل

إذا لم يكن لديك قاعدة بيانات مكونة، قم بتشغيل الأمر لتهيئة Sequelize وإنشاء النموذج:

yarn sequelize init

سيؤدي هذا إلى إنشاء بنية دليل التكوين والنماذج والترحيلات داخل مشروعك. بعد ذلك، قم بإنشاء النماذج اللازمة للتطبيق مثل User وPost، وقم بإجراء عمليات الترحيل لإنشاء الجداول في قاعدة البيانات.

yarn sequelize db:migrate

تأكد من تشغيل قاعدة البيانات (على سبيل المثال باستخدام PostgreSQL أو MySQL).


5. إعداد خادم GraphQL

تثبيت التبعيات لخادم Apollo وGraphQL:

yarn add apollo-server graphql

بعد ذلك، قم بإنشاء ملف تكوين خادم GraphQL والمخطط والمحللات. يمكنك تكوين خادم GraphQL بالطريقة التالية:

src/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
  • وثائق ريديس
  • وثائق 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