كيفية إنشاء NodeJS API بدون استخدام إطار عمل

كيفية إنشاء NodeJS API بدون استخدام إطار عمل

Node.js هو وقت تشغيل جافا سكريبت مفتوح المصدر مبني على محرك كروم v8 الذي يسمح لك بتشغيل كود جافا سكريبت خارج المتصفح.





لقد جعل نموذج الحدث والنظام البيئي والسرعة Node.js أحد أكثر أوقات التشغيل المطلوبة والمستخدمة للتطبيقات من جانب الخادم.





تستخدم معظم خوادم واجهة برمجة تطبيقات Node.js Express أو إطار عمل آخر. ومع ذلك ، يمكنك أيضًا إنشاء واجهة برمجة تطبيقات Node.js بسيطة بدون إطار عمل في بضع خطوات فقط.





اجعل فيديو اليوم

الخطوة 1: تهيئة بيئة التطوير الخاصة بك

قم بإنشاء دليل المشروع و قرص مضغوط فيه عن طريق تشغيل:

mkdir nodejs-api 
cd nodejs-api

بعد ذلك ، قم بالتهيئة npm في مشروعك عن طريق تشغيل:



npm init -y 

ستعرض واجهة برمجة تطبيقات CRUD هذه استخدام MongoDB ، قاعدة بيانات NoSQL ، و ODM الشهير ، النمس.

قم بتشغيل الأمر التالي للتثبيت النمس :





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 إنشاء خادم الطريقة التي تنشئ وتعيد مثيل الخادم. ال إنشاء خادم تأخذ الطريقة وظيفة رد الاتصال مع كائن الطلب والاستجابة كمعلمات.

بعد ذلك ، يستدعي الرمز استمع على مثيل الخادم الذي تم إرجاعه. هذا يسمح للخادم ببدء الاستماع لحركة المرور على المنفذ المحدد. ال استمع تقوم الطريقة بإطلاق نداء - الوسيطة الثانية - عندما تنجح.

أفضل كمبيوتر محمول بأقل من 1000 دولار في 2016

أخيرًا ، قم بإنشاء دليلين باسم الطرق و عارضات ازياء في الدليل الجذر لمشروعك. ال الطرق سيحتوي المجلد على منطق التوجيه لواجهة برمجة التطبيقات الخاصة بك ، بينما نموذج سوف تحتوي على كل ما يتعلق بقاعدة البيانات.

الخطوة 2: توصيل تطبيقك بقاعدة بيانات

في server.js ، يستورد النمس :

const mongoose = require("mongoose"); 

اتصل ب الاتصال طريقة على النمس وتمرير MongoDB URI الخاص بك كوسيطة:

mongoose.connect("MongoDB_URI") 

الخطوة 3: إنشاء نموذج API

قم بإنشاء واجهة برمجة تطبيقات CRUD لتطبيق مدونة بسيط. في الخاص بك عارضات ازياء مجلد ، قم بإنشاء ملف blogModel.js file وأضف الكود التالي إلى ملفك:

xbox one vs xbox series x
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: تنفيذ التوجيه في تطبيقك

بدون مساعدة أطر مثل Express ، سيتعين عليك إنشاء المنطق يدويًا للتعامل مع كل طلب يتم إجراؤه على واجهة برمجة التطبيقات الخاصة بك.

أولاً ، قم بإنشاء ملف blogRoutes.js ملف في الخاص بك الطرق المجلد ، ثم قم باستيراد نموذج المدونة:

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

بعد ذلك ، قم بإنشاء ملف جهاز التوجيه وظيفة ، تمر مطلوب و الدقة كمعلمات ، وتصدير الوظيفة:

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 و طريقة خصائص كائن الطلب. ثم يقوم بجلب جميع المدونات من قاعدة البيانات عبر تجد الطريقة على نموذج النمس ( مقالات ).

بعد ذلك ، يستدعي الكتابة طريقة على الدقة ، كائن الاستجابة. ترسل هذه الطريقة رأس استجابة في ضوء ثلاث وسيطات: رمز الحالة ورسالة الحالة الاختيارية والعناوين. ال 200 يمثل رمز الحالة استجابة ناجحة ويتم تعيين نوع المحتوى لاستدعاء API هذا على التطبيق / json .

أخيرًا ، أغلق الطلب للتأكد من عدم توقف الخادم عن طريق استدعاء نهاية طريقة على الدقة . الدعوة إلى 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 }));
}
}

يستخدم هذا الرمز الامتداد مباراة ، الذي يأخذ تعبير regex كوسيطة ، للتحقق مما إذا كان عنوان url يطابق التنسيق: / api / blogs / <رقم> .

بعد ذلك ، قم باستخراج ملف هوية شخصية ممتلكات من عنوان url السلسلة عن طريق استدعاء ملف ينقسم طريقة. تأخذ هذه الطريقة نمطًا كوسيطة ( / ) ، يقسم السلسلة بناءً على النمط ، ويعيد مصفوفة. العنصر الثالث من تلك المصفوفة هو هوية شخصية .

أخيرًا ، استرجع المستند بالمطابقة هوية شخصية من قاعدة البيانات الخاصة بك. إذا كان موجودًا ، أرسل ملف كود استجابة 200 وأغلق الطلب وأرسل المدونة المستردة. إذا لم يكن موجودًا ، فقم بإلقاء خطأ وأرسله كرد في كتلة catch.

طريق البريد

أضف كتلة التعليمات البرمجية أدناه إلى وظيفة جهاز التوجيه الخاص بك لتنفيذ ملف بريد معالج الطريق:

// 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 واجهه المستخدم. هذا الدفق ينبعث من ملف بيانات و نهاية الحدث الذي يتيح لك الوصول إلى البيانات من نص الطلب.

يستمع هذا الرمز إلى حدث البيانات ويتعامل معه عن طريق تحويله إلى سلسلة وتسلسله إلى ملف هيئة عامل. في ال نهاية معالج الحدث ، يقوم بإنشاء ملف مقالات المثال مع سلسلة الجسم المحللة. ثم يحفظ المدونة الجديدة ، ويرسل رمز الحالة ورأس المحتوى ، ويغلق الطلب.

طريق 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 ، يحذف المستند مع المطابقة هوية شخصية ويرسل رمز الحالة والعناوين ويغلق الطلب.

i7 ثنائي النواة مقابل i5 رباعي النواة

أخيرًا ، الاستيراد جهاز التوجيه في الخاص بك server.js ملف واستدعاء جهاز التوجيه وظيفة ، عابرة مطلوب و الدقة كالحجج:

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

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

هذا يسمح لخادمك باعتراض الطلبات ومعالجتها بشكل مناسب.

يمكنك العثور على المشروع المكتمل في هذا مستودع جيثب .

استخدام إطار عمل Node.js

على الرغم من إمكانية إنشاء واجهة برمجة تطبيقات ويب يدويًا ، إلا أنها قد تكون مهمة صعبة. ستحتاج إلى التأكد من أنك غطيت الكثير من حالات الحافة ومن الأفضل أن تكون شفرتك خالية من الأخطاء.

على مر السنين ، قام المطورون ببناء أطر عمل مثل ExpressJS و NestJS و Fastify وما إلى ذلك لتسهيل الأمر كثيرًا.