此範本提供了一個Node.js 入門專案,預先設定了GraphQL 用於API,RedisGraphQL 用於API,Redis用於快取和臨時資料存儲,JWT
用於身份驗證和授權,?項目概況 此專案旨在讓使用GraphQL API 更輕鬆地開發後端應用程序,該API 使用Redis 進行資料緩存,並使用JWT
來保護API。克隆儲存庫
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api首先,將此範本儲存庫複製到本機:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
複製儲存庫或建立新專案後,執行指令來安裝所需的依賴項:
mkdir blog-api cd blog-api npm init -y
這將安裝 package.json 檔案中列出的所有相依性。
在專案根目錄建立.env文件,並為Redis、JWT、資料庫新增以下設定:
yarn install
根據您的資料庫設定更改使用者、密碼和 mydatabase。
如果沒有設定資料庫,請執行指令初始化Sequelize並建立模型:
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
這將在您的專案中建立配置、模型和遷移目錄結構。接下來,為應用程式建立必要的模型,例如 User 和 Post,並執行遷移以在資料庫中建立表格。
yarn sequelize init
確保資料庫正在運作(例如使用 PostgreSQL 或 MySQL)。
安裝 Apollo Server 和 GraphQL 的依賴項:
yarn sequelize db:migrate
之後,建立 GraphQL 伺服器設定檔、架構和解析器。您可以透過以下方式設定 GraphQL 伺服器:
yarn add apollo-server 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'); });
實作查詢和突變的解析器:
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; }, }, };
伺服器將在 http://localhost:4000 運行,您可以存取 GraphQL Playground 來測試 API 查詢和突變。
此專案目錄結構旨在分隔應用程式的不同部分,使其更加模組化且易於維護:
yarn dev
要準備生產項目,請使用以下命令將 TypeScript 建置為 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
輸出將位於 dist/ 資料夾中,並準備好部署到生產伺服器。
此專案可透過以下步驟部署至 Heroku、AWS 或 DigitalOcean 等平台:
按照上述步驟,您現在可以使用 Redis、JWT 和 Sequelize 運行和開發 GraphQL API 應用程式。
以上是Node.js 入門專案包括 GraphQL、Redis、JWT 和 Sequelize的詳細內容。更多資訊請關注PHP中文網其他相關文章!