একটি ফ্রেমওয়ার্ক ব্যবহার না করে কিভাবে একটি NodeJS API তৈরি করবেন

একটি ফ্রেমওয়ার্ক ব্যবহার না করে কিভাবে একটি NodeJS API তৈরি করবেন

Node.js হল একটি ওপেন-সোর্স জাভাস্ক্রিপ্ট রানটাইম যা chrome-এর v8 ইঞ্জিনে তৈরি যা আপনাকে ব্রাউজারের বাইরে JavaScript কোড চালানোর অনুমতি দেয়।





এর ইভেন্ট মডেল, ইকোসিস্টেম এবং গতি Node.js কে সার্ভার-সাইড অ্যাপ্লিকেশনের জন্য সবচেয়ে কাঙ্ক্ষিত এবং ব্যবহৃত রানটাইমগুলির মধ্যে একটি করে তুলেছে।





বেশিরভাগ Node.js API সার্ভার এক্সপ্রেস বা অন্য ফ্রেমওয়ার্ক ব্যবহার করে। যাইহোক, আপনি কয়েকটি ধাপে ফ্রেমওয়ার্ক ছাড়াই একটি সাধারণ Node.js API তৈরি করতে পারেন।





দিনের মেকইউজের ভিডিও

ধাপ 1: আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করা

একটি প্রকল্প ডিরেক্টরি তৈরি করুন এবং সিডি এটি চালানোর মাধ্যমে:

mkdir nodejs-api 
cd nodejs-api

পরবর্তী, আরম্ভ npm চালানোর মাধ্যমে আপনার প্রকল্পে:



npm init -y 

এই CRUD API মঙ্গোডিবি, একটি নোএসকিউএল ডাটাবেস এবং এর জনপ্রিয় ওডিএম, মঙ্গুজের ব্যবহার বৈশিষ্ট্যযুক্ত করবে।

ইনস্টল করার জন্য নিম্নলিখিত কমান্ডটি চালান মঙ্গুস :





npm install mongoose 

পরবর্তী, একটি তৈরি করুন server.js আপনার প্রকল্পের রুট ডিরেক্টরিতে ফাইল করুন এবং একটি সার্ভার তৈরি করতে নীচের কোড ব্লক যোগ করুন:

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

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

এই কোড ব্লকটি HTTP মডিউল আমদানি করে, একটি মূল Node.js মডিউল। HTTP মডিউল Node.js কে HTTP-এর মাধ্যমে ডেটা স্থানান্তর করতে দেয়। এই মডিউলটিতে সার্ভার তৈরির জন্য প্রয়োজনীয় পদ্ধতি রয়েছে।





এর পরে, এটি http মডিউলকে কল করে সার্ভার তৈরি করুন পদ্ধতি যা একটি সার্ভারের একটি উদাহরণ তৈরি করে এবং ফেরত দেয়। দ্য সার্ভার তৈরি করুন পদ্ধতি পরামিতি হিসাবে একটি অনুরোধ এবং প্রতিক্রিয়া বস্তু সহ একটি কলব্যাক ফাংশন নেয়।

পরবর্তী, কোড কল শুনুন প্রত্যাবর্তিত সার্ভার উদাহরণে পদ্ধতি। এটি সার্ভারকে প্রদত্ত পোর্টে ট্র্যাফিকের জন্য শোনা শুরু করার অনুমতি দেয়। দ্য শুনুন পদ্ধতি একটি কলব্যাক ফায়ার করে - দ্বিতীয় যুক্তি - যখন এটি সফল হয়।

অবশেষে, নামে দুটি ডিরেক্টরি তৈরি করুন রুট এবং মডেল আপনার প্রকল্পের রুট ডিরেক্টরিতে। দ্য রুট ফোল্ডারে আপনার API এর জন্য রাউটিং লজিক থাকবে মডেল ডাটাবেসের সাথে সম্পর্কিত সবকিছু থাকবে।

ধাপ 2: আপনার অ্যাপ্লিকেশনটিকে একটি ডাটাবেসের সাথে সংযুক্ত করা

ভিতরে server.js , আমদানি মঙ্গুস :

const mongoose = require("mongoose"); 

কল সংযোগ পদ্ধতি চালু মঙ্গুস এবং একটি যুক্তি হিসাবে আপনার MongoDB URI পাস করুন:

mongoose.connect("MongoDB_URI") 

ধাপ 3: একটি API মডেল তৈরি করা

একটি সাধারণ ব্লগ অ্যাপ্লিকেশনের জন্য একটি CRUD API তৈরি করুন৷ আপনার মধ্যে মডেল ফোল্ডার, একটি তৈরি করুন blogModel.js ফাইল করুন এবং আপনার ফাইলে নিম্নলিখিত কোড যোগ করুন:

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);

উপরের কোড ব্লক দুটি বৈশিষ্ট্য সহ একটি মঙ্গুজ মডেল তৈরি করে এবং সেগুলিকে একটি MongoDB ডাটাবেসে ম্যাপ করে।

এই মডেলের উভয় বৈশিষ্ট্য একটি আছে স্ট্রিং দিয়ে টাইপ করুন প্রয়োজনীয় সেট সত্য . অনুরোধের বডিতে কোনো বৈশিষ্ট্য না থাকলে সহগামী ত্রুটি বার্তাগুলি প্রদর্শিত হবে।

চূড়ান্ত লাইনটি কল করে একটি মঙ্গুজ মডেল তৈরি করে এবং রপ্তানি করে মডেল পদ্ধতি চালু মঙ্গুস মডেল নাম পাস ( ব্লগ ) প্রথম যুক্তি এবং একটি স্কিমা হিসাবে ( ব্লগের সময়সূচী ) দ্বিতীয় যুক্তি হিসাবে।

ধাপ 4: আপনার অ্যাপ্লিকেশনে রাউটিং বাস্তবায়ন করা

সাহায্য ছাড়া এক্সপ্রেস মত ফ্রেমওয়ার্ক , আপনার API এ করা প্রতিটি অনুরোধ পরিচালনা করার জন্য আপনাকে ম্যানুয়ালি যুক্তি তৈরি করতে হবে।

প্রথমত, একটি তৈরি করুন blogRoutes.js আপনার মধ্যে ফাইল রুট ফোল্ডার, তারপর ব্লগ মডেল আমদানি করুন:

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

পরবর্তী, একটি অ্যাসিঙ্ক্রোনাস তৈরি করুন রাউটার ফাংশন, পাস অনুরোধ এবং res পরামিতি হিসাবে, এবং ফাংশন রপ্তানি করুন:

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

এই ফাংশনে আপনার সমস্ত রাউটিং লজিক থাকবে।

এর পরে, আপনি রুট দ্বারা রাউটিং লজিক রুট বাস্তবায়ন করবেন।

রুট পান

আপনার নীচের কোড ব্লক যোগ করুন রাউটার কার্যকর করার ফাংশন পাওয়া করা অনুরোধের জন্য রুট হ্যান্ডলার /api/blogs :

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

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

// send data
res.end(JSON.stringify(blogs));
}

উপরের কোড ব্লকটি চেক করে url এবং পদ্ধতি অনুরোধ বস্তুর বৈশিষ্ট্য। এটি তারপর ডাটাবেস থেকে এর মাধ্যমে সমস্ত ব্লগ নিয়ে আসে অনুসন্ধান মঙ্গুজ মডেলের পদ্ধতি ( ব্লগ )

পরবর্তী, এটি কল হেড লিখুন পদ্ধতি চালু res , প্রতিক্রিয়া বস্তু. এই পদ্ধতিটি তিনটি আর্গুমেন্ট দেওয়া একটি প্রতিক্রিয়া হেডার পাঠায়: একটি স্ট্যাটাস কোড, একটি ঐচ্ছিক স্ট্যাটাস মেসেজ এবং হেডার। দ্য 200 স্থিতি কোড একটি সফল প্রতিক্রিয়া উপস্থাপন করে এবং এই API কলের জন্য বিষয়বস্তু-প্রকার সেট করা আছে অ্যাপ্লিকেশন/জেসন .

আমার পিছনের ক্যামেরা কাজ করছে না কেন?

অবশেষে, কল করে সার্ভার হ্যাং না হয় তা নিশ্চিত করতে অনুরোধটি বন্ধ করুন শেষ পদ্ধতি চালু res . কল JSON.stringify রূপান্তরিত করে ব্লগ একটি JSON স্ট্রিং আপত্তি এবং যে পাস শেষ পদ্ধতি এটি প্রতিক্রিয়া বডি হিসাবে ফেরত দেয়।

আপনার নীচের কোড ব্লক যোগ করুন রাউটার কার্যকর করার ফাংশন পাওয়া একটি একক সম্পদের জন্য রুট হ্যান্ডলার:

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

// get blog from DB
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 }));
}
}

এই কোড ব্যবহার করে ম্যাচ পদ্ধতি, যা url বিন্যাসের সাথে মেলে কিনা তা পরীক্ষা করার জন্য একটি regex এক্সপ্রেশন একটি যুক্তি হিসাবে নেয়: /api/blogs/<সংখ্যা> .

পরবর্তী, নিষ্কাশন আইডি থেকে সম্পত্তি url তার কল করে স্ট্রিং বিভক্ত পদ্ধতি এই পদ্ধতিটি একটি যুক্তি হিসাবে একটি প্যাটার্ন নেয় ( / ), প্যাটার্নের উপর ভিত্তি করে স্ট্রিংকে বিভক্ত করে এবং একটি অ্যারে প্রদান করে। যে অ্যারের তৃতীয় উপাদান হল আইডি .

অবশেষে, মিলের সাথে নথিটি পুনরুদ্ধার করুন আইডি আপনার ডাটাবেস থেকে। যদি এটি বিদ্যমান থাকে, একটি পাঠান 200 এর প্রতিক্রিয়া কোড , অনুরোধটি বন্ধ করুন এবং পুনরুদ্ধার করা ব্লগটি পাঠান। যদি এটি বিদ্যমান না থাকে, একটি ত্রুটি নিক্ষেপ করুন এবং ক্যাচ ব্লকে একটি প্রতিক্রিয়া হিসাবে এটি পাঠান।

পোস্ট রুট

বাস্তবায়ন করতে আপনার রাউটার ফাংশনে নীচের কোড ব্লক যোগ করুন পোস্ট রুট হ্যান্ডলার:

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

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

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

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

অনুরোধ বস্তু বাস্তবায়ন করে Node.js ReadableStream ইন্টারফেস. এই স্রোত নির্গত হয় a তথ্য এবং একটি শেষ ইভেন্ট যা আপনাকে অনুরোধের বডি থেকে ডেটাতে অ্যাক্সেস দেয়।

এই কোডটি ডেটা ইভেন্টের জন্য শোনে এবং এটিকে একটি স্ট্রিংয়ে রূপান্তর করে এবং এটিকে সংযুক্ত করে এটি পরিচালনা করে শরীর পরিবর্তনশীল মধ্যে শেষ ইভেন্ট হ্যান্ডলার, এটি একটি তৈরি করে ব্লগ পার্স করা বডি স্ট্রিং সহ উদাহরণ। তারপরে এটি নতুন ব্লগ সংরক্ষণ করে, স্ট্যাটাস কোড এবং বিষয়বস্তু শিরোনাম পাঠায় এবং অনুরোধটি বন্ধ করে।

PUT রুট

বাস্তবায়ন করতে আপনার রাউটার ফাংশনে নীচের কোড ব্লক যোগ করুন PUT রুট হ্যান্ডলার:

// PUT: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "PUT") {
try {
// extract id from url
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);
}
}

PUT অনুরোধ হ্যান্ডলার প্রায় অনুরূপ পোস্ট রিকোয়েস্ট হ্যান্ডলার, ব্যতীত এটি এক্সট্রাক্ট করে আইডি থেকে সম্পত্তি url প্রাসঙ্গিক ব্লগ আপডেট করতে.

রুট মুছুন

আপনার বাস্তবায়ন করতে আপনার রাউটার ফাংশনে নীচের কোড ব্লক যোগ করুন মুছে ফেলা রুট হ্যান্ডলার:

// 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 }));
}
}

এই কোড ব্লক নিষ্কাশন আইডি থেকে url , মিলের সাথে নথি মুছে দেয় আইডি , স্থিতি কোড এবং শিরোনাম পাঠায়, এবং অনুরোধ বন্ধ করে।

অবশেষে, আমদানি রাউটার আপনার মধ্যে server.js ফাইল এবং আপনার কল রাউটার ফাংশন, পাসিং অনুরোধ এবং res যুক্তি হিসাবে:

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

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

এটি আপনার সার্ভারকে যথাযথভাবে অনুরোধগুলিকে বাধা দিতে এবং পরিচালনা করতে দেয়।

আপনি এতে সম্পূর্ণ প্রকল্পটি খুঁজে পেতে পারেন GitHub সংগ্রহস্থল .

একটি Node.js ফ্রেমওয়ার্ক ব্যবহার করা

যদিও এটি হাতে একটি ওয়েব API তৈরি করা সম্ভব, এটি একটি কঠিন কাজ হতে পারে। আপনাকে নিশ্চিত করতে হবে যে আপনি প্রচুর এজ কেস কভার করেছেন এবং আপনার কোডটি বাগ-মুক্ত হওয়া আরও ভাল।

বছরের পর বছর ধরে, বিকাশকারীরা এটিকে আরও সহজ করতে ExpressJS, NestJS, Fastify ইত্যাদির মতো ফ্রেমওয়ার্ক তৈরি করেছে।