Templat ini menyediakan Node.js Starter Project prakonfigurasi dengan GraphQL untuk API, Redis untuk caching dan sementara storan data, JWT untuk pengesahan dan kebenaran, dan Sequelize untuk ORM yang disambungkan ke pangkalan data hubungan seperti PostgreSQL atau MySQL. Projek ini mempunyai struktur modular yang membolehkan anda membangunkan aplikasi web moden dengan serta-merta dengan ciri bersepadu dan berskala.
Projek ini direka bentuk untuk memudahkan pembangunan aplikasi hujung belakang dengan API GraphQL yang menggunakan Redis untuk caching data dan JWT untuk menjamin API. Sequelize digunakan sebagai ORM untuk memudahkan interaksi dengan pangkalan data hubungan. Selain itu, terdapat perisian tengah yang memudahkan untuk mengendalikan pengesahan, pengesahan dan pengelogan.
Pertama sekali, klon repositori templat ini ke mesin tempatan anda:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
Jika anda bermula dari awal, mulakan projek baharu dengan:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
Selepas mengklon repositori atau mencipta projek baharu, jalankan arahan untuk memasang kebergantungan yang diperlukan:
mkdir blog-api cd blog-api npm init -y
Ini akan memasang semua kebergantungan yang disenaraikan dalam fail package.json.
Buat fail .env dalam direktori akar projek dan tambahkan konfigurasi berikut untuk Redis, JWT dan Pangkalan Data:
yarn install
Tukar pengguna, kata laluan dan pangkalan data saya mengikut konfigurasi pangkalan data anda.
Jika anda tidak mempunyai pangkalan data yang dikonfigurasikan, jalankan arahan untuk memulakan Sequelize dan mencipta model:
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
Ini akan membuat konfigurasi, model dan struktur direktori migrasi dalam projek anda. Seterusnya, cipta model yang diperlukan untuk aplikasi seperti Pengguna dan Siar, dan lakukan migrasi untuk mencipta jadual dalam pangkalan data.
yarn sequelize init
Pastikan pangkalan data berjalan (contohnya menggunakan PostgreSQL atau MySQL).
Pasang kebergantungan untuk Apollo Server dan GraphQL:
yarn sequelize db:migrate
Selepas itu, buat fail konfigurasi pelayan GraphQL, skema dan penyelesai. Anda boleh mengkonfigurasi pelayan GraphQL dengan cara berikut:
yarn add apollo-server graphql
Tentukan skema GraphQL untuk pertanyaan dan mutasi:
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'); });
Laksanakan penyelesai untuk pertanyaan dan mutasi:
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 } `;
Untuk menjalankan pelayan dalam persekitaran pembangunan dengan hot-reload, gunakan arahan berikut:
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; }, }, };
Pelayan akan dijalankan di http://localhost:4000, dan anda boleh mengakses GraphQL Playground untuk menguji pertanyaan API dan mutasi.
Struktur direktori projek ini direka untuk memisahkan bahagian aplikasi yang berbeza untuk menjadikannya lebih modular dan mudah diselenggara:
yarn dev
Untuk menyediakan projek untuk pengeluaran, gunakan arahan berikut untuk membina TypeScript ke dalam 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
Output akan berada dalam folder dist/ dan sedia untuk digunakan ke pelayan pengeluaran.
Projek ini boleh digunakan pada platform seperti Heroku, AWS atau DigitalOcean dengan langkah berikut:
Dengan mengikut langkah di atas, anda kini boleh menjalankan dan membangunkan aplikasi GraphQL API menggunakan Redis, JWT dan Sequelize.
Atas ialah kandungan terperinci Projek Permulaan Node.js dengan GraphQL, Redis, JWT, dan Sequelize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!