Diese Vorlage stellt ein Node.js-Starterprojekt bereit, das mit GraphQL für die API, Redis für konfiguriert wurde Caching und temporäre Datenspeicherung, JWT für Authentifizierung und Autorisierung und Sequelize für ORM die eine Verbindung zu einer relationalen Datenbank wie PostgreSQL oder MySQL herstellt. Das Projekt ist modular aufgebaut und ermöglicht Ihnen die sofortige Entwicklung moderner Webanwendungen mit integrierten und skalierbaren Funktionen.
Dieses Projekt soll die Entwicklung von Backend-Anwendungen mit einer GraphQL-API erleichtern, die Redis für das Daten-Caching und JWT für die Sicherung der API verwendet. Sequelize wird als ORM verwendet, um die Interaktion mit relationalen Datenbanken zu erleichtern. Darüber hinaus gibt es Middleware, die die Handhabung von Authentifizierung, Validierung und Protokollierung erleichtert.
Klonen Sie zunächst dieses Vorlagen-Repository auf Ihren lokalen Computer:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
Wenn Sie bei Null anfangen, initialisieren Sie ein neues Projekt mit:
mkdir blog-api cd blog-api npm init -y
Nachdem Sie das Repository geklont oder ein neues Projekt erstellt haben, führen Sie den Befehl aus, um die erforderlichen Abhängigkeiten zu installieren:
yarn install
Dadurch werden alle in der Datei package.json aufgeführten Abhängigkeiten installiert.
Erstellen Sie eine .env-Datei im Projektstammverzeichnis und fügen Sie die folgenden Konfigurationen für Redis, JWT und Datenbank hinzu:
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
Ändern Sie Benutzer, Passwort und mydatabase entsprechend Ihrer Datenbankkonfiguration.
Wenn Sie keine Datenbank konfiguriert haben, führen Sie den Befehl aus, um Sequelize zu initialisieren und das Modell zu erstellen:
yarn sequelize init
Dadurch wird eine Verzeichnisstruktur für Konfigurationen, Modelle und Migrationen in Ihrem Projekt erstellt. Erstellen Sie als Nächstes die erforderlichen Modelle für die Anwendung, z. B. Benutzer und Post, und führen Sie Migrationen durch, um Tabellen in der Datenbank zu erstellen.
yarn sequelize db:migrate
Stellen Sie sicher, dass die Datenbank ausgeführt wird (z. B. mit PostgreSQL oder MySQL).
Abhängigkeiten für Apollo Server und GraphQL installieren:
yarn add apollo-server graphql
Erstellen Sie anschließend eine GraphQL-Serverkonfigurationsdatei, ein Schema und Resolver. Sie können den GraphQL-Server folgendermaßen konfigurieren:
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-Schema für Abfragen und Mutationen definieren:
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 } `;
Resolver für Abfragen und Mutationen implementieren:
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; }, }, };
Um den Server in einer Entwicklungsumgebung mit Hot-Reload auszuführen, verwenden Sie den folgenden Befehl:
yarn dev
Der Server läuft unter http://localhost:4000 und Sie können auf den GraphQL Playground zugreifen, um API-Abfragen und Mutationen zu testen.
Diese Projektverzeichnisstruktur soll verschiedene Teile der Anwendung trennen, um sie modularer und einfacher zu warten:
/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
Um das Projekt für die Produktion vorzubereiten, verwenden Sie den folgenden Befehl, um TypeScript in JavaScript zu integrieren:
yarn build
Die Ausgabe befindet sich im Ordner dist/ und kann auf dem Produktionsserver bereitgestellt werden.
Dieses Projekt kann mit den folgenden Schritten auf Plattformen wie Heroku, AWS oder DigitalOcean bereitgestellt werden:
Indem Sie die oben genannten Schritte ausführen, können Sie jetzt GraphQL-API-Anwendungen mit Redis, JWT und Sequelize ausführen und entwickeln.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3