Projek Permulaan Node.js dengan GraphQL, Redis, JWT, dan Sequelize

Patricia Arquette
Lepaskan: 2024-11-13 01:56:02
asal
363 orang telah melayarinya

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

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.

? Gambaran Keseluruhan Projek

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.

Ciri-ciri Utama

  • GraphQL API untuk pertanyaan yang lebih fleksibel dan cekap serta mutasi data
  • Pengesahan JWT untuk pengesahan berasaskan token yang selamat
  • Redis untuk caching data dan meningkatkan prestasi aplikasi
  • Sekuel ORM untuk pengurusan pangkalan data hubungan
  • Perisian Tengah untuk kebenaran berpusat dan pengendalian permintaan
  • Modular dan tersusun dengan baik untuk kebolehskalaan dan penyelenggaraan yang lebih mudah

?️ Teknologi Digunakan

  • Node.js: Platform untuk membina aplikasi sisi pelayan dengan JavaScript. Ketahui lebih lanjut
  • GraphQL: Bahasa pertanyaan untuk API yang membolehkan pengambilan data yang cekap dan fleksibel. Ketahui lebih lanjut
  • Redis: Storan data sementara (dalam memori) yang sering digunakan untuk caching dan pembrokeran mesej. Ketahui lebih lanjut
  • JWT: Teknologi pengesahan berasaskan token yang selamat dan ringkas. Ketahui lebih lanjut
  • Sequelize: ORM untuk Node.js yang menyokong PostgreSQL, MySQL dan pangkalan data hubungan lain. Ketahui lebih lanjut

? Langkah-langkah untuk Menyediakan dan Menjalankan Projek

1. Repositori Klon

Pertama sekali, klon repositori templat ini ke mesin tempatan anda:

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
Salin selepas log masuk
Salin selepas log masuk

Jika anda bermula dari awal, mulakan projek baharu dengan:

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
Salin selepas log masuk
Salin selepas log masuk

2. Pemasangan Ketergantungan

Selepas mengklon repositori atau mencipta projek baharu, jalankan arahan untuk memasang kebergantungan yang diperlukan:

mkdir blog-api
cd blog-api
npm init -y
Salin selepas log masuk

Ini akan memasang semua kebergantungan yang disenaraikan dalam fail package.json.


3. Tatarajah Persekitaran

Buat fail .env dalam direktori akar projek dan tambahkan konfigurasi berikut untuk Redis, JWT dan Pangkalan Data:

yarn install
Salin selepas log masuk

Tukar pengguna, kata laluan dan pangkalan data saya mengikut konfigurasi pangkalan data anda.


4. Menyediakan Pangkalan Data dengan Sequelize

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"
Salin selepas log masuk

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
Salin selepas log masuk

Pastikan pangkalan data berjalan (contohnya menggunakan PostgreSQL atau MySQL).


5. Menyediakan Pelayan GraphQL

Pasang kebergantungan untuk Apollo Server dan GraphQL:

yarn sequelize db:migrate
Salin selepas log masuk

Selepas itu, buat fail konfigurasi pelayan GraphQL, skema dan penyelesai. Anda boleh mengkonfigurasi pelayan GraphQL dengan cara berikut:

src/server.ts

yarn add apollo-server graphql
Salin selepas log masuk

src/graphql/schema.ts

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');
});
Salin selepas log masuk

src/graphql/resolvers.ts

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
  }
`;
Salin selepas log masuk

6. Menjalankan Pelayan untuk Pembangunan

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;
    },
  },
};
Salin selepas log masuk

Pelayan akan dijalankan di http://localhost:4000, dan anda boleh mengakses GraphQL Playground untuk menguji pertanyaan API dan mutasi.


? Struktur Direktori Projek

Struktur direktori projek ini direka untuk memisahkan bahagian aplikasi yang berbeza untuk menjadikannya lebih modular dan mudah diselenggara:

yarn dev
Salin selepas log masuk

? Kerahan

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
Salin selepas log masuk

Output akan berada dalam folder dist/ dan sedia untuk digunakan ke pelayan pengeluaran.

Bersedia untuk Platform Awan

Projek ini boleh digunakan pada platform seperti Heroku, AWS atau DigitalOcean dengan langkah berikut:

  1. Tekan Kod ke Repositori Git (GitHub, GitLab atau lain-lain).
  2. Tetapkan Pembolehubah Persekitaran pada platform awan yang dipilih (Redis, Rahsia JWT, Pangkalan Data URL).
  3. Gunakan projek menggunakan arahan atau penyepaduan daripada platform awan.

? sumber

  • Dokumentasi GrafQL
  • Dokumentasi Redis
  • Dokumentasi JWT
  • Dokumentasi Sekuel

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan