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.
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
Posting Komentar