Membangun aplikasi web di era modern memerlukan pondasi yang kokoh. Framework modern memberikan fleksibilitas luar biasa bagi developer untuk menghadirkan fitur kompleks secara cepat tanpa mengabaikan aspek keamanan dan keandalan sistem.
Tahapan Implementasi & Walkthrough Kode
Berikut adalah langkah demi langkah teknis yang dapat Anda ikuti langsung pada codebase Anda:
Tahap 1: Penulisan Kode & Konfigurasi
//import PrismaClient
const { PrismaClient } = require('@prisma/client');
//init prisma client
const prisma = new PrismaClient();
// Import validationResult from express-validator
const { validationResult } = require("express-validator");
//function findPosts
const findPosts = async (req, res) => {
try {
//get all posts from database
const posts = await prisma.post.findMany({
select: {
id: true,
title: true,
content: true,
createdAt: true,
updatedAt: true,
},
orderBy: {
createdAt: "desc",
},
});
//send response
res.status(200).send({
success: true,
message: "Get All Posts Successfully",
data: posts,
});
} catch (error) {
res.status(500).send({
success: false,
message: "Internal server error",
});
}
};
//function createPost
const createPost = async (req, res) => {
// Periksa hasil validasi
const errors = validationResult(req);
if (!errors.isEmpty()) {
// Jika ada error, kembalikan error ke pengguna
return res.status(422).json({
success: false,
message: "Validation error",
errors: errors.array(),
});
}
try {
//insert data
const post = await prisma.post.create({
data: {
title: req.body.title,
content: req.body.content,
},
});
res.status(201).send({
success: true,
message: "Post Created Successfully",
data: post,
});
} catch (error) {
res.status(500).send({
success: false,
message: "Internal server error",
});
}
};
//function findPostById
const findPostById = async (req, res) => {
//get ID from params
const { id } = req.params;
try {
//get post by ID
const post = await prisma.post.findUnique({
where: {
id: id,
},
select: {
id: true,
title: true,
content: true,
createdAt: true,
updatedAt: true,
},
});
//send response
res.status(200).send({
success: true,
message: `Get Post By ID :${id}`,
data: post,
});
} catch (error) {
res.status(500).send({
success: false,
message: "Internal server error",
});
}
};
//export function
module.exports = {
findPosts,
createPost,
findPostById,
}
Tahap 2: Penulisan Kode & Konfigurasi
//function findPostById
const findPostById = async (req, res) => {
//...
}
Tahap 3: Penulisan Kode & Konfigurasi
//get ID from params
const { id } = req.params;
Tahap 4: Penulisan Kode & Konfigurasi
//get post by ID
const post = await prisma.post.findUnique({
where: {
id: id,
},
select: {
id: true,
title: true,
content: true,
createdAt: true,
updatedAt: true,
},
});
Tahap 5: Penulisan Kode & Konfigurasi
//send response
res.status(200).send({
success: true,
message: `Get Post By ID :${id}`,
data: post,
});
Tahap 6: Penulisan Kode & Konfigurasi
//export function
module.exports = {
findPosts,
createPost,
findPostById,
}
Tahap 7: Penulisan Kode & Konfigurasi
//import express
const express = require('express')
//init express router
const router = express.Router();
//import PostController
const PostController = require('../controllers/PostController');
//import validate post
const { validatePost } = require('../utils/validators');
//define route for posts
router.get('/posts', PostController.findPosts);
//define route for create post
router.post('/posts', validatePost, PostController.createPost);
//define route for get post by id
router.get('/posts/:id', PostController.findPostById);
//export router
module.exports = router
Tahap 8: Penulisan Kode & Konfigurasi
//define route for get post by id
router.get('/posts/:id', PostController.findPostById);
Tahap 9: Penulisan Kode & Konfigurasi
{
"success": true,
"message": "Get Post By ID :66f4b24a526d2c38ce14f2ae",
"data": {
"id": "66f4b24a526d2c38ce14f2ae",
"title": "Belajar Express dan MongoDB di SantriKoding",
"content": "Belajar Express dan MongoDB di SantriKoding",
"createdAt": "2024-09-26T01:00:57.237Z",
"updatedAt": "2024-09-26T01:00:57.237Z"
}
}
Selalu gunakan pendekatan deklaratif, validasi input seawal mungkin di boundary layer, dan lakukan logging terstruktur untuk memudahkan observability ketika sistem dijalankan di lingkungan cloud produksi.
Kesimpulan
Dengan mengikuti langkah-langkah terstruktur di atas, implementasi modul Anda akan jauh lebih rapi, aman dari bug umum, serta siap diskalakan ke lingkungan produksi.
Nantikan artikel tutorial praktis lainnya seputar fullstack development, microservices, dan otomasi AI di Blog Engineering SiHubung. Selamat mencoba!