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

Template ini menyediakan Node.js Starter Project yang telah dikonfigurasi dengan GraphQL untuk API, Redis untuk caching dan penyimpanan data sementara, JWT untuk otentikasi dan otorisasi, serta Sequelize untuk ORM yang terhubung ke database relasional …


This content originally appeared on DEV Community and was authored by dio arafi

Template ini menyediakan Node.js Starter Project yang telah dikonfigurasi dengan GraphQL untuk API, Redis untuk caching dan penyimpanan data sementara, JWT untuk otentikasi dan otorisasi, serta Sequelize untuk ORM yang terhubung ke database relasional seperti PostgreSQL atau MySQL. Proyek ini memiliki struktur modular yang memungkinkan Anda untuk langsung mengembangkan aplikasi web modern dengan fitur-fitur yang telah terintegrasi dan dapat diskalakan.

๐Ÿ“‹ Ikhtisar Proyek

Proyek ini dirancang untuk memudahkan pengembangan aplikasi backend dengan API GraphQL yang menggunakan Redis untuk caching data dan JWT untuk mengamankan API. Sequelize digunakan sebagai ORM untuk memudahkan interaksi dengan database relasional. Selain itu, terdapat middleware yang memudahkan penanganan otentikasi, validasi, dan logging.

Fitur Utama

  • GraphQL API untuk query dan mutasi data yang lebih fleksibel dan efisien
  • JWT Authentication untuk otentikasi berbasis token yang aman
  • Redis untuk caching data dan meningkatkan performa aplikasi
  • Sequelize ORM untuk pengelolaan database relasional
  • Middleware untuk otorisasi dan penanganan request secara terpusat
  • Modular dan terstruktur dengan baik untuk skalabilitas dan pemeliharaan yang lebih mudah

๐Ÿ› ๏ธ Teknologi yang Digunakan

  • Node.js: Platform untuk membangun aplikasi server-side dengan JavaScript. Pelajari lebih lanjut
  • GraphQL: Query language untuk API yang memungkinkan pengambilan data secara efisien dan fleksibel. Pelajari lebih lanjut
  • Redis: Penyimpanan data sementara (in-memory) yang sering digunakan untuk caching dan message brokering. Pelajari lebih lanjut
  • JWT: Teknologi otentikasi berbasis token yang aman dan sederhana. Pelajari lebih lanjut
  • Sequelize: ORM untuk Node.js yang mendukung PostgreSQL, MySQL, dan database relasional lainnya. Pelajari lebih lanjut

๐Ÿš€ Langkah-langkah untuk Menyiapkan dan Menjalankan Proyek

1. Mengkloning Repositori

Pertama-tama, kloning repositori template ini ke mesin lokal Anda:

git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api

Jika Anda memulai dari awal, inisialisasi proyek baru dengan:

mkdir blog-api
cd blog-api
npm init -y

2. Instalasi Dependensi

Setelah mengkloning repositori atau membuat proyek baru, jalankan perintah untuk menginstal dependensi yang diperlukan:

yarn install

Ini akan menginstal semua dependensi yang tercantum dalam file package.json.

3. Konfigurasi Environment

Buat file .env di direktori root proyek dan tambahkan konfigurasi berikut untuk Redis, JWT, dan Database:

DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"

Gantilah user, password, dan mydatabase sesuai dengan konfigurasi database Anda.

4. Menyiapkan Database dengan Sequelize

Jika Anda belum memiliki database yang terkonfigurasi, jalankan perintah untuk menginisialisasi Sequelize dan membuat model:

yarn sequelize init

Ini akan membuat struktur direktori config, models, dan migrations di dalam proyek Anda. Selanjutnya, buat model yang diperlukan untuk aplikasi seperti User dan Post, serta lakukan migrasi untuk membuat tabel di database.

yarn sequelize db:migrate

Pastikan database sudah berjalan (misalnya menggunakan PostgreSQL atau MySQL).

5. Menyiapkan Server GraphQL

Install dependensi untuk Apollo Server dan GraphQL:

yarn add apollo-server graphql

Setelah itu, buat file konfigurasi server GraphQL, schema, dan resolvers. Anda bisa mengonfigurasi server GraphQL dengan cara berikut:

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

Definisikan schema GraphQL untuk query 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
  }
`;

src/graphql/resolvers.ts

Implementasikan resolvers untuk query dan mutasi:

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. Menjalankan Server untuk Pengembangan

Untuk menjalankan server di lingkungan pengembangan dengan hot-reload, gunakan perintah berikut:

yarn dev

Server akan berjalan di http://localhost:4000, dan Anda dapat mengakses GraphQL Playground untuk menguji query dan mutasi API.

๐Ÿ“‚ Struktur Direktori Proyek

Struktur direktori proyek ini dirancang untuk memisahkan berbagai bagian aplikasi agar lebih modular dan mudah dipelihara:

/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

๐Ÿ“ฆ Deployment

Untuk mempersiapkan proyek untuk produksi, gunakan perintah berikut untuk membangun TypeScript menjadi JavaScript:

yarn build

Output akan berada di folder dist/ dan siap untuk di-deploy ke server produksi.

Menyiapkan untuk Platform Cloud

Proyek ini dapat di-deploy ke platform seperti Heroku, AWS, atau DigitalOcean dengan langkah-langkah berikut:

  1. Push Kode ke Repositori Git (GitHub, GitLab, atau lainnya).
  2. Atur Variabel Environment di platform cloud yang dipilih (Redis, JWT Secret, Database URL).
  3. Deploy proyek menggunakan perintah atau integrasi dari platform cloud.

๐Ÿ“š Sumber Daya

Dengan mengikuti langkah-langkah di atas, Anda sekarang dapat menjalankan dan mengembangkan aplikasi GraphQL API menggunakan Redis, JWT, dan Sequelize.


This content originally appeared on DEV Community and was authored by dio arafi


Print Share Comment Cite Upload Translate Updates
APA

dio arafi | Sciencx (2024-11-10T01:46:24+00:00) Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize. Retrieved from https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/

MLA
" » Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize." dio arafi | Sciencx - Sunday November 10, 2024, https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/
HARVARD
dio arafi | Sciencx Sunday November 10, 2024 » Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize., viewed ,<https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/>
VANCOUVER
dio arafi | Sciencx - » Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/
CHICAGO
" » Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize." dio arafi | Sciencx - Accessed . https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/
IEEE
" » Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize." dio arafi | Sciencx [Online]. Available: https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/. [Accessed: ]
rf:citation
» Node.js Starter Project dengan GraphQL, Redis, JWT, dan Sequelize | dio arafi | Sciencx | https://www.scien.cx/2024/11/10/node-js-starter-project-dengan-graphql-redis-jwt-dan-sequelize/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.