Membuat Api CRUD dengan Node

Membuat API CRUD dengan Node.js dan MongoDB

1. Persiapan Awal


Pertama, kita akan melakukan persiapan lingkungan kerja untuk proyek API CRUD ini:
- Buka VSCode dan buka folder kerja Anda. Misalnya, arahkan ke C:\xampp\htdocs.
- Buat direktori baru untuk proyek API dengan perintah berikut:


mkdir crud-api4
cd crud-api4



- Inisialisasi npm untuk membuat file package.json:


npm init -y






- Instal semua dependency yang diperlukan dengan perintah berikut:


npm install express mongoose nodemon body-parser






- Tambahkan script berikut di package.json untuk memudahkan menjalankan server:


"scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
}





Dengan script ini, Anda dapat menjalankan server dengan perintah npm run start atau npm run dev, tanpa perlu mengetikkan node index.js atau nodemon index.js setiap kali.





2. Membuat Database dan Koleksi di MongoDB


Langkah selanjutnya adalah membuat database dan koleksi di MongoDB:
- Buat database dengan nama polibest4.



- Buat koleksi customers dengan data berikut:


[
    { "_id": 1, "name": "John Doe", "email": "john@example.com", "phone": "555-1111" },
    { "_id": 2, "name": "Jane Smith", "email": "jane@example.com", "phone": "555-2222" },
    { "_id": 3, "name": "Mike Brown", "email": "mike@example.com", "phone": "555-3333" }
]




- Buat koleksi orders dengan data berikut:


[
    { "_id": 101, "order_date": "2024-10-01", "customer_id": 1, "products": [ { "name": "Laptop", "quantity": 1 }, { "name": "Mouse", "quantity": 2 } ], "amount": 1500 },
    { "_id": 102, "order_date": "2024-10-02", "customer_id": 2, "products": [ { "name": "Keyboard", "quantity": 1 } ], "amount": 100 },
    { "_id": 103, "order_date": "2024-10-03", "customer_id": 1, "products": [ { "name": "Monitor", "quantity": 1 } ], "amount": 300 },
    { "_id": 104, "order_date": "2024-10-04", "customer_id": 3, "products": [ { "name": "Phone", "quantity": 1 }, { "name": "Headphones", "quantity": 1 } ], "amount": 800 }
]




3. Membuat file index.js


Sekarang, buat file index.js di dalam folder proyek crud-api4 dengan kode berikut:


const express = require('express');
const { MongoClient } = require('mongodb');
const app = express();
const port = 3000;
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);
const dbName = 'polibest4';

app.get('/orders/group', async (req, res) => {
    try {
        await client.connect();
        const db = client.db(dbName);
        const ordersCollection = db.collection('orders');

        const result = await ordersCollection.aggregate([
            { $group: { _id: "$customer_id", totalAmount: { $sum: "$amount" } } }
        ]).toArray();

        res.json(result);
    } catch (err) {
        res.status(500).send('Error: ' + err.message);
    } finally {
        await client.close();
    }
});

app.get('/orders/match', async (req, res) => {
    try {
        await client.connect();
        const db = client.db(dbName);
        const ordersCollection = db.collection('orders');

        const result = await ordersCollection.aggregate([
            { $match: { amount: { $gte: 300 } } },
            { $sort: { amount: -1 } }
        ]).toArray();

        res.json(result);
    } catch (err) {
        res.status(500).send('Error: ' + err.message);
    } finally {
        await client.close();
    }
});

app.get('/orders/lookup', async (req, res) => {
    try {
        await client.connect();
        const db = client.db(dbName);
        const ordersCollection = db.collection('orders');

        const result = await ordersCollection.aggregate([
            {
                $lookup: {
                    from: "customers",
                    localField: "customer_id",
                    foreignField: "_id",
                    as: "customer_info"
                }
            }
        ]).toArray();

        res.json(result);
    } catch (err) {
        res.status(500).send('Error: ' + err.message);
    } finally {
        await client.close();
    }
});

app.get('/orders/unwind', async (req, res) => {
    try {
        await client.connect();
        const db = client.db(dbName);
        const ordersCollection = db.collection('orders');

        const result = await ordersCollection.aggregate([
            { $unwind: "$products" },
            { $group: { _id: "$products.name", totalSold: { $sum: "$products.quantity" } } }
        ]).toArray();

        res.json(result);
    } catch (err) {
        res.status(500).send('Error: ' + err.message);
    } finally {
        await client.close();
    }
});

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});



4. Menjalankan dan Menguji Aplikasi


Untuk menjalankan aplikasi, jalankan perintah:


npm run dev



Berikut adalah beberapa endpoint yang dapat Anda coba:

- GET `/orders/group`: Menghitung total amount yang dibelanjakan oleh masing-masing customer.




- GET `/orders/match`: Menampilkan pesanan dengan amount >= 300, diurutkan secara menurun (descending).



 
- GET `/orders/lookup`: Menggabungkan koleksi orders dengan customers untuk menampilkan informasi pelanggan pada setiap pesanan.




- GET `/orders/unwind`: Menguraikan array produk dan mengelompokkan berdasarkan nama produk dengan total jumlah yang terjual.




TUGAS

a. Jalankan ke-4 aggregate diatas dengan MongoDB Shell dan screenshot hasil 
b. Jalankan ke-4 aggregate diatas dengan MongoDB Compass dan screenshot hasil 
c. Pastikan hasilnya sama dengan pengujian di aplikasi nodejs diatas

MONGO DB SHELL
















MONGODB COMPASS








Dengan mengikuti tutorial ini, Anda telah membangun API CRUD sederhana menggunakan Node.js, Express, dan MongoDB, serta melakukan beberapa operasi agregasi. Proyek ini bisa dikembangkan lebih lanjut dengan menambahkan fitur lain seperti update dan delete, autentikasi, dan pagination.

Selamat mencoba!








Komentar