Cara Membuat API NodeJS Tanpa Menggunakan Kerangka

Node.js adalah runtime JavaScript open-source yang dibangun di atas mesin v8 chrome yang memungkinkan Anda menjalankan kode JavaScript di luar browser.

Model peristiwa, ekosistem, dan kecepatannya telah menjadikan Node.js salah satu runtime yang paling dicari dan digunakan untuk aplikasi sisi server.

Sebagian besar server API Node.js menggunakan Express atau kerangka kerja lain. Namun, Anda juga dapat membuat API Node.js sederhana tanpa kerangka kerja hanya dalam beberapa langkah.


Langkah 1: Menyiapkan Lingkungan Pengembangan Anda

Buat direktori proyek dan CD ke dalamnya dengan menjalankan:

mkdir nodejs-api
cd nodejs-api

Selanjutnya, inisialisasi npm di proyek Anda dengan menjalankan:

npm init -y

CRUD API ini akan menampilkan penggunaan MongoDB, database NoSQL, dan ODM populernya, luwak.

Jalankan perintah berikut untuk menginstal luwak:

npm install mongoose

Selanjutnya, buat server.js file di direktori root proyek Anda dan tambahkan blok kode di bawah ini untuk membuat server:

const http = require("http");
const server = http.createServer((req, res) => {});

server.listen(3000, () => {
console.log(`Server is running`);
});

Blok kode ini mengimpor modul http, modul inti Node.js. Modul http memungkinkan Node.js untuk mentransfer data melalui HTTP. Modul ini berisi metode yang diperlukan untuk membuat server.

Selanjutnya, ia memanggil modul http buat Server metode yang membuat dan mengembalikan instance server. Itu buat Server metode mengambil fungsi panggilan balik dengan objek permintaan dan respons sebagai parameter.

Selanjutnya, kode memanggil mendengarkan metode pada instance server yang dikembalikan. Ini memungkinkan server untuk mulai mendengarkan lalu lintas pada port yang diberikan. Itu mendengarkan metode menjalankan panggilan balik—argumen kedua—ketika berhasil.

Terakhir, buat dua direktori bernama rute dan model di direktori root proyek Anda. Itu rute folder akan berisi logika perutean untuk API Anda, sementara model akan berisi segala sesuatu yang berhubungan dengan database.

See also  Cara Memperbaiki Kesalahan Outlook 0x800CCC90 Saat Menerima Electronic mail di Home windows

Langkah 2: Menghubungkan Aplikasi Anda ke Database

Di server.jsimpor luwak:

const mongoose = require("mongoose");

Panggil Menghubung metode aktif luwak dan berikan URI MongoDB Anda sebagai argumen:

mongoose.connect("MongoDB_URI")

Langkah 3: Membuat Model API

Buat CRUD API untuk aplikasi blog sederhana. di kamu model folder, buat blogModel.js file dan tambahkan kode berikut ke file Anda:

const mongoose = require("mongoose");
const blogSchema = mongoose.Schema({
title: {
type: String,
required: [true, "Blog must have a title"],
},
body: {
type: String,
required: [true, "Blog must have a body"],
},
});
module.exports = mongoose.model("Blog", blogSchema);

Blok kode di atas membuat model luwak dengan dua properti dan memetakannya ke database MongoDB.

Kedua properti dalam model ini memiliki Rangkaian ketik dengan yg dibutuhkan mulai BENAR. Pesan kesalahan yang menyertainya akan ditampilkan jika badan permintaan tidak berisi salah satu properti.

Baris terakhir membuat dan mengekspor model luwak dengan memanggil model metode aktif luwak. Lewati nama model (Blog) sebagai argumen pertama dan skema (blogSkema) sebagai argumen kedua.

Langkah 4: Menerapkan Perutean di Aplikasi Anda

Tanpa bantuan kerangka kerja seperti Express, Anda harus membuat logika secara manual untuk menangani setiap permintaan yang dibuat ke API Anda.

Pertama, buat blogRoutes.js file di Anda rute folder, lalu impor model blog:

const Blog = require("../models/blogModel");

Selanjutnya, buat asinkron router fungsi, lulus permintaan dan res sebagai parameter, dan ekspor fungsinya:

const router = async function (req, res) {};
module.exports = router;

Fungsi ini akan berisi semua logika perutean Anda.

Selanjutnya, Anda akan menerapkan logika perutean rute demi rute.

DAPATKAN Rute

Tambahkan blok kode di bawah ini ke router berfungsi untuk mengimplementasikan DAPATKAN pengendali rute untuk permintaan yang dibuat ke /api/blogs:


if (req.url === "/api/blogs" && req.method === "GET") {
const blogs = await Blog.find();

// set the status code and content-type
res.writeHead(200, { "Content-Type": "application/json" });


res.end(JSON.stringify(blogs));
}

Blok kode di atas memeriksa url dan metode properti dari objek permintaan. Kemudian mengambil semua blog dari database melalui Temukan metode pada model luwak (Blog).

See also  Apa itu Penyorotan Sintaks?

Selanjutnya, ia memanggil menulisKepala metode aktif res, objek respon. Metode ini mengirimkan header respons yang diberikan tiga argumen: kode status, pesan status opsional, dan header. Itu 200 kode status mewakili respons yang berhasil dan tipe konten untuk panggilan API ini disetel ke aplikasi/json.

Terakhir, tutup permintaan untuk memastikan server tidak hang dengan memanggil akhir metode aktif res. Panggilan untuk JSON.stringify mengubah blog objek ke string JSON dan meneruskannya ke akhir metode mengembalikannya sebagai badan respons.

Tambahkan blok kode di bawah ini ke router berfungsi untuk mengimplementasikan DAPATKAN penangan rute untuk satu sumber daya:


if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method === "GET") {
try {
const id = req.url.split("/")[3];


const blog = await Blog.findById(id);

if (blog) {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
} else {
throw new Error("Blog does not exist");
}
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

Kode ini menggunakan cocok metode, yang menggunakan ekspresi regex sebagai argumen, untuk memeriksa apakah url cocok dengan format: /api/blog/.

Selanjutnya, ekstrak Indo properti dari url string dengan memanggilnya membelah metode. Metode ini mengambil pola sebagai argumen (/), membagi string berdasarkan pola, dan mengembalikan array. Elemen ketiga dari array itu adalah Indo.

Akhirnya, ambil dokumen dengan yang cocok Indo dari basis data Anda. Jika ada, kirim kode respons 200, tutup permintaan, dan kirim blog yang diambil. Jika tidak ada, lempar kesalahan dan kirimkan sebagai respons di blok tangkap.

Rute POSTING

Tambahkan blok kode di bawah ini ke fungsi router Anda untuk mengimplementasikan POS pengendali rute:


if (req.url === "/api/blogs" && req.method === "POST") {
try {
let body = "";


req.on("data", (chunk) => {
body += chunk.toString();
});

// Listen for end event
req.on("end", async () => {
let blog = new Blog(JSON.parse(body));


await blog.save();
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
});
} catch (error) {
console.log(error);
}
}

Objek permintaan mengimplementasikan antarmuka ReadableStream Node.js. Aliran ini memancarkan data dan akhir acara yang memberi Anda akses ke data dari badan permintaan.

See also  Apa itu Bun.js dan Mengapa Komunitas JavaScript Bersemangat Tentang Ini?

Kode ini mendengarkan peristiwa data dan menanganinya dengan mengubahnya menjadi string dan menggabungkannya ke tubuh variabel. Dalam akhir event handler, itu menciptakan Blog contoh dengan string tubuh yang diurai. Ini kemudian menyimpan blog baru, mengirim kode status dan header konten, dan menutup permintaan.

Rute PUT

Tambahkan blok kode di bawah ini ke fungsi router Anda untuk mengimplementasikan TARUH pengendali rute:


if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method === "PUT") {
try {
const id = req.url.split("/")[3];
let body = "";

req.on("data", (chunk) => {
body += chunk.toString();
});
req.on("end", async () => {
// Find and update document
let updatedBlog = await Blog.findByIdAndUpdate(id, JSON.parse(body), {
new: true,
});

res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(updatedBlog));
});
} catch (error) {
console.log(error);
}
}

Penangan permintaan PUT hampir identik dengan POS penangan permintaan, kecuali bahwa itu mengekstrak Indo properti dari url untuk memperbarui blog yang relevan.

HAPUS Rute

Tambahkan blok kode di bawah ini ke fungsi router Anda untuk mengimplementasikan MENGHAPUS pengendali rute:

// DELETE: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method === "DELETE") {
try {
const id = req.url.split("/")[3];

// Delete blog from DB
await Blog.findByIdAndDelete(id);
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Blog deleted successfully" }));
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

Blok kode ini mengekstrak Indo dari urlmenghapus dokumen dengan yang cocok Indomengirimkan kode status dan header, dan menutup permintaan.

Akhirnya, impor router di kamu server.js arsipkan dan hubungi Anda router fungsi, lulus permintaan dan res sebagai argumen:

const router = require("./routes/blogRoutes");

const server = http.createServer((req, res) => {
router(req, res);
});

Ini memungkinkan server Anda untuk mencegat dan menangani permintaan dengan tepat.

Anda dapat menemukan proyek yang telah selesai di repositori GitHub ini.

Menggunakan Kerangka Node.js

Meskipun mungkin untuk membuat web API dengan tangan, itu bisa menjadi tugas yang sulit. Anda harus memastikan bahwa Anda telah membahas banyak kasus tepi dan kode Anda sebaiknya bebas bug.

Selama bertahun-tahun, pengembang telah membangun kerangka kerja seperti ExpressJS, NestJS, Fastify, dll., untuk membuatnya lebih mudah.