Panduan praktis dan terstruktur mengenai panduan restful api express dan mongodb: insert data ke database (part 4) berstandar enterprise. Pelajari konsep, implementasi kode modern, dan tips arsitektur enterprise siap produksi.
Selamat datang di seri tutorial engineering SiHubung! Pada artikel ini, kita akan membedah secara komprehensif implementasi Panduan Restful Api Express Dan Mongodb: Insert Data Ke Database (Part 4) Berstandar Enterprise dengan standar kode bersih (clean code), performa tinggi, dan arsitektur siap produksi.

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

npm install body-parser@1.20.0

Tahap 2: Penulisan Kode & Konfigurasi

//import express
const express = require('express')

//import router
const router = require('./routes')

//import bodyParser
const bodyParser = require('body-parser')

//init app
const app = express()

//define port
const port = 3000;

//use body parser
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

//route
app.get('/', (req, res) => {
  res.send('Hello World!')
})

//define routes
app.use('/api', router)

//start server
app.listen(port, () => {
    console.log(`Server started on port ${port}`);
})

Tahap 3: Penulisan Kode & Konfigurasi

//import body parser
const bodyParser = require('body-parser')

Tahap 4: Penulisan Kode & Konfigurasi

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

Tahap 5: Penulisan Kode & Konfigurasi

npm install express-validator@7.1.0

Tahap 6: Penulisan Kode & Konfigurasi

//import express validator
const { body } = require('express-validator');

//definisikan validasi untuk post
const validatePost= [
    body('title').notEmpty().withMessage('Title is required'),
    body('content').notEmpty().withMessage('Content is required'),
];

module.exports = { validatePost };

Tahap 7: Penulisan Kode & Konfigurasi

//import express validator
const { body } = require('express-validator');

Tahap 8: Penulisan Kode & Konfigurasi

body('title').notEmpty().withMessage('Title is required'),
body('content').notEmpty().withMessage('Content is required'),

Tahap 9: 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",
        });
    }
};

//export function
module.exports = {
    findPosts,  
    createPost,
}

Tahap 10: Penulisan Kode & Konfigurasi

// Import validationResult from express-validator
const { validationResult } = require("express-validator");

Tahap 11: Penulisan Kode & Konfigurasi

//function createPost
const createPost = async (req, res) => {

	//...
	
}

Tahap 12: Penulisan Kode & Konfigurasi

// Periksa hasil validasi
const errors = validationResult(req);

Tahap 13: Penulisan Kode & Konfigurasi

// Jika ada error, kembalikan error ke pengguna
return res.status(422).json({
    success: false,
    message: "Validation error",
    errors: errors.array(),
});

Tahap 14: Penulisan Kode & Konfigurasi

//insert data
const post = await prisma.post.create({
    data: {
        title: req.body.title,
        content: req.body.content,
    },
});

Tahap 15: Penulisan Kode & Konfigurasi

res.status(201).send({
    success: true,
    message: "Post Created Successfully",
    data: post,
});e

Tahap 16: Penulisan Kode & Konfigurasi

//export function
module.exports = {
    findPosts,  
    createPost,
}

Tahap 17: 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);

//export router
module.exports = router

Tahap 18: Penulisan Kode & Konfigurasi

//import validate post
const { validatePost } = require('../utils/validators');

Tahap 19: Penulisan Kode & Konfigurasi

//define route for create post
router.post('/posts', validatePost, PostController.createPost);

Tahap 20: Penulisan Kode & Konfigurasi

{
    "success": true,
    "message": "Post Created Successfully",
    "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"
    }
}
💡 Tips Rekayasa Perangkat Lunak (SiHubung Engineering Best Practice)

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!