Membuat RESTFul API dengan NodeJS, ExpressJS dan MongoDB
Membuat RESTFul API dengan NodeJS, ExpressJS dan MongoDB
1. Install Express, Mongoose, Nodemon, dan Cors
Buat sebuah Folder dengan nama "restful". Kemudian, buka folder tersebut di Visual Studio Code.
Selanjutnya pilih dimenu bar terminal > new terminal.
Setelah itu, ketikan perintah berikut pada terminal untuk membuat file "package.json".
Selanjutnya, install nodemon, lalu tambahkan kode berikut pada file "package.json".
"type": "module",
Sehingga file "packgae.json" terlihat seperti dibawah ini
{
"name": "restful",
"version": "1.0.0",
"type": "module",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.1",
"mongoose": "^6.4.0"
},
"devDependencies": {
"nodemon": "^2.0.16"
},
"description": ""
}
2. Index.js dan Koneksi ke Database
Buat file "index.js" pada folder "restful". kemudian ketikan kode dibawah ini.
//import express
import express from "express";
//import mongoose
import mongoose from "mongoose";
// import routes
import route from "./routes/index.js";
//import cors
import cors from "cors";
// construct express function
const app = express();
// connect ke database mongoDB
mongoose.connect("mongodb://localhost:27017/restful_db",{
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', (error)=> console.error(error));
db.once('open', () => console.log('Database Connected'));
// middleware
app.use(cors());
app.use(express.json());
app.use('/product',route);
// listening to port
app.listen('3000',()=> console.log('Server Running at port: 3000'));
pada kode ini, akan diconnect ke database "restful_db" yang akan di connect otomatis oleh mongoDB
3. Routes
Tahap selanjutnya, buat sebuah folder bernama "routes", kemudian tambahkan file bernama "index.js" di dalam folder tersebut.
// import express
import express from "express";
// import controllers
import { getProducts,
getProductById,
saveProduct,
updateProduct,
deleteProduct } from "../controllers/productController.js";
// express router
const router = express.Router();
// Route get All Products
router.get('/', getProducts);
// Route get single Product
router.get('/:id', getProductById);
// Route CREATE Product
router.post('/', saveProduct);
// Route UPDATE Product
router.patch('/:id', updateProduct);
// Route DELETE Product
router.delete('/:id', deleteProduct);
// export router
export default router;
4. Models
Selanjutnya, buat sebuah folder bernama "models", kemudian buat file bernama "Product.js" didalam folder tersebut.
import mongoose from "mongoose";
const Product = mongoose.Schema({
title:{
type: String,
require: true
},
price:{
type: Number,
required: true
}
});
export default mongoose.model('Products',Product);
5. Controllers
Buat sebuah folder bernama "controllers", kemudian tambahkan sebuah file dan beri nama "productController.js".
Kemudian, ketikan kode berikut pada file "productController.js" yang terdapat pada folder "controllers".
// import models
import Product from "../models/Product.js";
// function get All Products
export const getProducts = async (req, res) => {
try {
const products = await Product.find();
res.json(products);
} catch (error) {
res.status(500).json({message: error.message});
}
}
// function get single Product
export const getProductById = async (req, res) => {
try {
const product = await Product.findById(req.params.id);
res.json(product);
} catch (error) {
res.status(404).json({message: error.message});
}
}
// function Create Product
export const saveProduct = async (req, res) => {
const product = new Product(req.body);
try {
const savedProduct = await product.save();
res.status(201).json(savedProduct);
} catch (error) {
res.status(400).json({message: error.message});
}
}
// function Update Product
export const updateProduct = async (req, res) => {
const cekId = await Product.findById(req.params.id);
if(!cekId) return res.status(404).json({message: "Data tidak ditemukan"});
try {
const updatedProduct = await Product.updateOne({_id: req.params.id}, {$set: req.body});
res.status(200).json(updatedProduct);
} catch (error) {
res.status(400).json({message: error.message});
}
}
// function Delete Product
export const deleteProduct = async (req, res) => {
const cekId = await Product.findById(req.params.id);
if(!cekId) return res.status(404).json({message: "Data tidak ditemukan"});
try {
const deletedProduct = await Product.deleteOne({_id: req.params.id});
res.status(200).json(deletedProduct);
} catch (error) {
res.status(400).json({message: error.message});
}
}
6. Testing
ketik perintah "nodemon index" pada terminal
kemudian, untuk melakukan pengujian, kita dapat menggunakan POSTMAN.
setelah terinstal, kemudian jalankan POSTMAN
#6.1 POST Product Baru (CREATE)
Buka POSTMAN, kemduian pilih methode "POST" > masukan EndPoint pada kolom URL > pilih Body > pilih raw > pilih application/json > masukan data dalam format json > klik tombol Send.
seperti gambar dibawah ini.
jika berhasil maka akan terdapat data respon seperti pada gambar diatas. Setelah itu, insert beberpaa data lagi untuk mempermudah pengujian
#6.2 GET Data Product (READ)
Ubah method dari "POST" ke "GET" dengan EndPoint yang sama, kemudian klik tombol "Send".
#6.3 PATCH Data Product (UPDATE)
Pilih methode "PATCH" > masukkan EndPoint beserta _id product yang akan di update pada kolom URL > pilih Body > pilih raw > pilih application/json >masukan data dalam format json > klik tombol Send.
Seperti pada gambar dibawah ini.
#6.5 DELETE product
Pilih method "DELETE", kemudian masukan URL beserta _id yang akan dihapus, lalu "Send".

Komentar
Posting Komentar