Tutorial Membuat CRUD REST API dari NOL dengan NodeJS dan MongoDB

Firmansyah Yanuar
5 min readOct 27, 2020

Setelah kemarin membahas “Mengenal REST API dari NOL” gak lengkap rasanya kalo ga diikuti dengan praktek. Pada praktek disini saya akan menggunakan NodeJS untuk membuat REST API. Sebetulnya tidak harus menggunakan NodeJS untuk membuat sebuah REST API. Setiap (kebanyakan) bahasa pemrograman bisa digunakan untuk membuat REST API. Jadi kalo kamu udah jago di salah satu bahasa, lebih baik gunakan bahasa tersebut.

Persiapan

Hal yang perlu dipersiapkan untuk membuat REST API disini, sebagai berikut:
1. NodeJS v12.19.0 (include npm)
https://nodejs.dev/

2. MongoDB Community Server v4.2.5 https://www.mongodb.com/try/download/community?tck=docs_server

3. Postman
https://www.filehorse.com/download-postman-64/

Versi tidak harus sesuai, namun yang digunakan pada tutorial ini sesuai dengan yang ditulis.

Inisialisasi Project NodeJS

1. Untuk menginisialisasi project, buat lah sebuah folder (sebagai contoh nama folder saya rest-api), lalu jalankan terminal/cmd dengan perintah berikut:

npm init

2. Setelah mengeksekusi perintah tersebut akan diminta konfigurasi, untuk sekarang cukup enter pada semua bagian hingga beres.

3. Jika sudah akan keluar sebuah file package.json yang berisikan :

{
"name": "rest-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
}
}

Install Express & Nodemon

Express adalah framework NodeJS yang digunakan untuk membuat sebuah server REST API. Sedangkan Nodemon adalah library yang digunakan untuk membantu proses pengembangan NodeJS. Untuk menginstalnya bisa dengan langkah berikut:

  1. Buka terminal/cmd dan eksekusi
npm install  expressnpm install -g nodemon

2. Selanjutnya kita akan membuat hello world untuk memastikan express & nodemon berfungsi. Untuk hal tersebut kita membuat file index.js, berisikan:

const express = require("express");const app = express();/*
Handle alamat / , lalu kirimkan response hello world
*/
app.get("/", (req, res) => {
res.json({ message: "Hello world" });
});
/*
Sediakan server pada localhost dengan port 3000
*/
app.listen(3000, () => {
console.log("Server running on port 3000");
});

3. Jalankan pada terminal

nodemon index.js

4. Untuk mengecek apakah sudah berhasil, kita bisa membuka alamat http://localhost:3000 dengan browser atau pada postman hasil sebagai berikut:

Hasil hello world nodemon

Handle request body

Sebagaimana dibahas di artikel sebelumnya, sebuah request bisa disisipkan sebuah data pada bagian body. Sebagai contoh, saya akan mengirim request yang disisipkan dua bilangan dengan harapan response penjumlahan dari kedua bilangan. Contoh dari request yang dikirimkan, sebagai berikut:

Request penjumlahan

1. Untuk menghandle request body berbentuk `json`, kita harus menginstall sebuah library dengan cara:

npm install body-parser

2. Import library body-parser dengan cara menambahkan code berikut:

const express = require("express");
const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.json())

...

3. Lalu untuk menghandle request penjumlahan tadi, sisipkan kode berikut :

/*
Handle method POST dengan alamat /penjumlahan ,
lalu kirimkan response hasil penjumlahan
*/
app.post('/penjumlahan', (req, res)=> {
res.json({result: req.body.a + req.body.b})
})


app.listen(3000, () => {
...

4. Lalu cek hasil dengan postman

Hasil penjumlahan

Membuat CRUD dengan MongoDB

CRUD (Create Read Update Delete) adalah operasi dasar pada sebuah aplikasi. Pada tutorial ini saya menggunakan MongoDB.

Install library mongoose & koneksi database

1. Install library mongoose

npm install mongoose

2. Kita import library & koneksikan database kita dengan cara tambahkan code berikut:

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

const app = express();

app.use(bodyParser.json())

// rest-api adalah contoh nama database
const dbUri = 'mongodb://localhost:27017/rest-api';
mongoose.connect(dbUri);
mongoose.connection.on("connected", () => {
console.log("Mongo berhasil terkoneksi");
});


...

Membuat proses Create & Read

  1. Sebagai contoh kita akan membuat sebuah CRUD mahasiswa. Untuk memudahkan saya akan pisahkan source code untuk menghandle CRUD ini dengan membuat file baru mahasiswa.route.js
  2. Lalu tambahkan kode dibawah pada index.js
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const mahasiswaRoute = require("./mahasiswa.route")

const app = express();

app.use(bodyParser.json())

// rest-api adalah contoh nama database
const dbUri = 'mongodb://localhost:27017/rest-api';
mongoose.connect(dbUri);
mongoose.connection.on("connected", () => {
console.log("Mongo berhasil terkoneksi");
});

app.use('/mahasiswa', mahasiswaRoute)

...

3. Sebelumnya kita akan buat schema. Schema adalah struktur dari data yang kita akan buat. Jika di MySQL, schema ini seperti tabel yang akan kita buat. Untuk membuat schema saya membuat mahasiswa.schema.js

const mongoose = require('mongoose');const MahasiswaSchema = new mongoose.Schema({
npm: {
type: String,
unique: true,
required: true
},
nama: {
type: String,
required: true
},
jurusan: {
type: String,
required: true
},
ipk: {
type: Number,
required: true
}
});
module.exports = MahasiswaSchema;

4. Setelah itu kita handle alamat dari GET /mahasiswa/ dan POST /mahasiswa/ , dengan menulis kode berikut pada mahasiswa.route.js

const router = require('express').Router();
const mongoose = require('mongoose');
const MahasiswaSchema = require('./mahasiswa.schema');

const mahasiswaModel = mongoose.model("Mahasiswa", MahasiswaSchema);

router.get('/', (req, res) => {
mahasiswaModel.find((error, mahasiswa) => {
if (error !== null) {
res.status(200).json({
message: error.message,
});
} else {
res.status(200).json(mahasiswa);
}
})
});

router.post('/', (req, res) => {
mahasiswaModel.create(req.body, (error, mahasiswa) => {
if (error !== null) {
res.json({
message: error.message
})
} else {
res.status(201).json({
message: 'Data mahasiswa berhasil dibuat',
mahasiswa
})
}
})
});

module.exports = router;

5. Setelah itu jalankan nodemon index.js, lalu jika berhasil maka hasil output dari postman akan keluar seperti ini

Hasil POST http://localhost:3000/mahasiswa (CREATE)
Hasil GET http://localhost:3000/mahasiswa (READ)

Membuat proses Update

1. Kode dibawah akan merubah data yang npm sama. Tambahkan kode berikut pada mahasiswa.route.js

...

router.put('/', (req, res) => {
mahasiswaModel.update({ npm: req.body.npm }, req.body, (error) => {
if (error !== null) {
res.json({
message: error.message
})
} else {
res.json({
message: 'Data mahasiswa berhasil diubah'
})
}
})
})


module.exports = router;

2. Jalankan nodemon index.js, lalu test dengan postman. Maka hasil dari postman akan seperti berikut :

Hasil PUT http://localhost:3000/mahasiswa (UPDATE)

Membuat proses Delete

  1. Untuk membuat proses delete sisipkan kode berikut. Kode tersebut akan menghapus data dengan npm yang disisipkan
...

router.delete('/', (req, res) => {
mahasiswaModel.deleteOne({ npm: req.body.npm }, (error, mahasiswa) => {
if (error !== null) {
res.json({
message: error.message
})
} else {
res.json({
message: 'Data mahasiswa berhasil dihapus'
})
}
})
});


module.exports = router;

2. Jalankan `nodemon index.js` , lalu test dengan postman. Maka hasil dari postman akan seperti berikut :

Hasil DELETE http://localhost:3000/mahasiswa (DELETE)

Hasil akhir : GITHUB

Ternyata cukup panjang ya. Sekian tutorial membuat CRUD REST API dari NOL dengan NodeJS dan MongoDB. Semoga terbantu. Jika kalian ingin diskusi bisa melalui kolom komentar atau linkedin saya. Thanks!

--

--

Firmansyah Yanuar

katanya sih developer, tapi suka greget sama desain dan pengen jualan...