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

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

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

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

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

mkdir nodejs-api
قرص مضغوط nodejs-api

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

npm الحرف الأول

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

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

npm تثبيت النمس

بعد ذلك ، قم بإنشاء ملف server.js ملف في الدليل الجذر لمشروعك وأضف مقطع التعليمات البرمجية أدناه لإنشاء خادم:

مقدار ثابت http = يتطلب("http") ؛
مقدار ثابت server = http.createServer ((req، res) => {}) ؛

server.listen (3000 ، () => {
وحدة التحكم.سجل("الخادم قيد التشغيل");
});

instagram viewer

تستورد كتلة الكود هذه وحدة http ، وهي وحدة Node.js أساسية. تسمح وحدة http لـ Node.js بنقل البيانات عبر HTTP. تحتوي هذه الوحدة على الطرق المطلوبة لإنشاء الخادم.

بعد ذلك ، تستدعي وحدة http إنشاء خادم الطريقة التي تنشئ وتعيد مثيل الخادم. ال إنشاء خادم تأخذ الطريقة وظيفة رد الاتصال مع كائن الطلب والاستجابة كمعلمات.

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

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

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

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

مقدار ثابت النمس = يتطلب("النمس")؛

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

mongoose.connect ("MongoDB_URI")

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

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

مقدار ثابت النمس = يتطلب("النمس")؛
مقدار ثابت blogSchema = النمس. مخطط({
لقب: {
يكتب: سلسلة,
مطلوب: [صحيح ، "يجب أن يكون للمدونة عنوان"],
},
هيئة: {
يكتب: سلسلة,
مطلوب: [صحيح ، "يجب أن تحتوي المدونة على جسم"],
},
});
وحدة.صادرات = mongoose.model ("مدونة" ، blogSchema) ؛

تقوم كتلة التعليمات البرمجية أعلاه بإنشاء نموذج نمس بخاصيتين وتعيينهما إلى قاعدة بيانات MongoDB.

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

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

الخطوة 4: تنفيذ التوجيه في تطبيقك

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

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

مقدار ثابت مدونة = يتطلب("../models/blogModel") ؛

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

مقدار ثابت جهاز التوجيه = غير متزامنوظيفة (مطلوب ، الدقة) {};
وحدة.صادرات = جهاز التوجيه ؛

ستحتوي هذه الوظيفة على منطق التوجيه الخاص بك.

بعد ذلك ، ستقوم بتنفيذ مسار منطق التوجيه حسب المسار.

احصل على الطرق

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

// GET: / api / blogs
إذا (req.url "/api/blogs"&& مطلوب "احصل على") {
// الحصول على كل المدونات
مقدار ثابت المدونات = انتظر Blog.find () ؛

// تعيين ال الحالة الشفرة والمحتوى-يكتب
res.writeHead (200 ، { "نوع المحتوى": "التطبيق / json" });

// إرسال البيانات
الدقة.نهاية(جسون.stringify(المدونات));
}

يتحقق رمز الكتلة أعلاه من عنوان url و طريقة خصائص كائن الطلب. ثم يقوم بجلب جميع المدونات من قاعدة البيانات عبر تجد الطريقة على نموذج النمس (مقالات).

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

أخيرًا ، أغلق الطلب للتأكد من عدم توقف الخادم عن طريق استدعاء نهاية طريقة على الدقة. الدعوة إلى JSON.stringify يحول ال المدونات كائن إلى سلسلة JSON وتمرير ذلك إلى ملف نهاية تقوم الطريقة بإرجاعها باعتبارها هيئة الاستجابة.

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

// GET: / api / blogs /: id
إذا (req.url.match (/ \\ / api \\ / blogs \\ / ([0-9] +) /) && مطلوب "احصل على") {
محاولة {
// استخراج المعرف من URL
معرف const = req.url.split ("/")[3];

// احصل على مدونة من DB
مقدار ثابت مدونة = انتظر Blog.findById (معرف) ؛

إذا (مدونة) {
res.writeHead (200 ، { "نوع المحتوى": "التطبيق / json" });
الدقة.نهاية(جسون.stringify(مقالات));
} آخر {
يرميالجديدخطأ("المدونة غير موجودة") ؛
}
} قبض على (خطأ) {
res.writeHead (404 ، { "نوع المحتوى": "التطبيق / json" });
الدقة.نهاية(جسون.stringify({ رسالة: خطأ }))؛
}
}

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

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

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

طريق البريد

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

// POST: / api / blogs /
إذا (req.url "/api/blogs"&& مطلوب "بريد") {
محاولة {
دع الجسم = "";

// استمع لحدث البيانات
مطلوب على ("بيانات"، (قطعة) => {
body + = chunk.toString () ؛
});

// استمع إلى نهايةحدث
مطلوب على ("نهاية"، غير متزامن () => {
// انشاء مدونة
يترك مدونة = الجديد مقالات(جسون.parse (الجسم)) ؛

// حفظ في DB
انتظر blog.save () ؛
res.writeHead (200 ، { "نوع المحتوى": "التطبيق / json" });
الدقة.نهاية(جسون.stringify(مقالات));
});
} قبض على (خطأ) {
وحدة التحكم.log (خطأ) ؛
}
}

كائن الطلب ينفذ Node.js ReadableStream واجهه المستخدم. هذا الدفق ينبعث من ملف بيانات و نهاية الحدث الذي يتيح لك الوصول إلى البيانات من نص الطلب.

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

طريق PUT

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

// PUT: / api / blogs /: id
إذا (req.url.match (/ \\ / api \\ / blogs \\ / ([0-9] +) /) && مطلوب "وضع") {
محاولة {
// استخراج المعرف من URL
معرف const = req.url.split ("/")[3];
دع الجسم = "";

مطلوب على ("بيانات"، (قطعة) => {
body + = chunk.toString () ؛
});
مطلوب على ("نهاية"، غير متزامن () => {
// اعثر و تحديثوثيقة
يترك updatedBlog = انتظر Blog.findByIdAndUpdate (معرف ، جسون.parse (الجسم) ، {
الجديد: حقيقي,
});

res.writeHead (200 ، { "نوع المحتوى": "التطبيق / json" });
الدقة.نهاية(جسون.stringify(محدث));
});
} قبض على (خطأ) {
وحدة التحكم.log (خطأ) ؛
}
}

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

حذف المسار

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

// حذف: / api / blogs /:هوية شخصية
إذا (req.url.match (/ \\ / api \\ / blogs \\ / ([0-9] +) /) && مطلوب "حذف") {
محاولة {
معرف const = req.url.split ("/")[3];

// حذف مقالات من DB
انتظر Blog.findByIdAndDelete (معرف) ،
res.writeHead (200 ، { "نوع المحتوى": "التطبيق / json" });
res.end (JSON.stringify ({الرسالة: "تم حذف المدونة بنجاح" }));
} قبض على (خطأ) {
res.writeHead (404 ، { "نوع المحتوى": "التطبيق / json" });
الدقة.نهاية(جسون.stringify({ رسالة: خطأ }))؛
}
}

يستخرج مقطع التعليمات البرمجية هذا ملف هوية شخصية من عنوان url، يحذف المستند مع المطابقة هوية شخصيةويرسل رمز الحالة والعناوين ويغلق الطلب.

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

مقدار ثابت جهاز التوجيه = يتطلب("./routes/blogRoutes") ؛

مقدار ثابت الخادم = http.createServer ((req، res) => {
جهاز التوجيه (مطلوب ، الدقة) ؛
});

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

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

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

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

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