هل تريد أن تتعلم كيفية إجراء طلبات POST في Node.js؟ إذاً، أنت في المكان الصحيح. في هذه المقالة، سأوضح لك كيفية استخدام وحدة http المدمجة ومكتبة axios الشهيرة لإجراء طلبات POST في Node.js. ثم، استخدم Apidog لاختبار طلبات POST بواجهة بصرية ومشاركتها مع فريقك.
ما هو طلب HTTP POST في NodeJS؟
يستخدم طلب HTTP POST في Node.js لإرسال البيانات إلى الخادم لإنشاء أو تحديث مورد. طلبات POST تُستخدم عادةً عند إرسال بيانات النموذج، تحميل الملفات، أو إرسال بيانات لتخزينها في قاعدة بيانات.
في Node.js، يمكنك إجراء طلب POST باستخدام وحدة http المدمجة أو مكتبة طرف ثالث مثل Axios. البيانات المرسلة مع الطلب تتضمن في جسم الطلب. يمكن للخادم بعد ذلك الوصول إلى هذه البيانات ومعالجتها لأداء الوظيفة المطلوبة.
يوفر Node.js نموذج إدخال وإخراج غير متزامن وبدون حظر يجعل التعامل مع التطبيقات التي تعتمد على البيانات والوقت الحقيقي فعالًا. توفر له القدرة على التعامل مع طلبات POST ومعالجة البيانات خيار شائع لبناء واجهات برمجة التطبيقات على الويب، وتطبيقات الدردشة في الوقت الحقيقي، وأنواع أخرى من تطبيقات الخادم.

كيفية إرسال طلب POST في Node.js؟
الآن، سنظهر لك عدة طرق لإرسال وإجراء طلبات POST في Node.js، بما في ذلك وحدة HTTP ومكتبة Axios. يمكنك اختيار الطريقة التي تناسب متطلبات مشروعك والتفضيلات.
1. إرسال طلب POST في Node.js باستخدام وحدة http
غالبًا ما يستخدم Node.js لإنشاء خوادم الويب، وتطبيقات الويب، واجهات برمجة التطبيقات على الويب. يوفر Node.js أيضًا وحدة http مدمجة تسمح لك بإجراء طلبات واستجابات HTTP.
لإجراء طلب POST في Node.js باستخدام وحدة http، تحتاج إلى اتباع هذه الخطوات:
- استيراد وحدة
httpباستخدام وظيفةrequire. - إنشاء كائن
optionsيحتوي على معلومات حول طلب POST، مثل اسم المضيف، المنفذ، المسار، الطريقة، الرؤوس، والبيانات. - استخدام طريقة
http.requestلإنشاء كائن الطلب، وتمرير كائنoptionsكالحجة الأولى ودالة رد نداء كالحجة الثانية. سيتم تنفيذ دالة رد النداء عند تلقي الاستجابة، وسيكون لديها كائنresponseكمعامل لها. - استخدام كائن
requestلإرسال البيانات وإنهاء الطلب. كائنrequestهو مثال على الفصلhttp.ClientRequest، الذي ينفذ واجهةWritableStream. وهذا يعني أنك يمكنك استخدام كائنrequestكتيار بيانات، وكتابة البيانات إليه باستخدام طريقةrequest.write. يمكنك أيضًا استخدام طريقةrequest.endللإشارة إلى انتهاء البيانات والطلب. يمكنك أيضًا الاستماع إلى أحداث مثلerrorوtimeoutعلى كائنrequest، ومعالجتها وفقًا لذلك. - استخدام كائن
responseللتعامل مع بيانات الاستجابة والرؤوس. كائنresponseهو مثال على الفصلhttp.IncomingMessage، الذي ينفذ واجهةReadableStream. وهذا يعني أنك يمكنك استخدام كائنresponseكتيار بيانات، والاستماع إلى أحداث مثلdataوendوerror. يمكنك أيضًا استخدام خاصيةresponse.statusCodeللحصول على كود الحالة للاستيجابة، وخاصيةresponse.headersللحصول على رؤوس الاستجابة. - استخدام طريقة
response.onلتسجيل مستمعي الأحداث لكائنresponse. على سبيل المثال، يمكنك استخدام طريقةresponse.on('data', callback)للاستماع إلى حدثdata، والذي سيتم إصداره عندما يتم تلقي جزء من البيانات. سيكون لدالة رد النداء كائنchunkكمعامل، والذي هو مخزن للبيانات. يمكنك استخدام طريقةchunk.toString()لتحويل المخزن إلى سلسلة، وإلحاقه بمتغير لتخزين بيانات الاستجابة الكاملة. يمكنك أيضًا استخدام طريقةresponse.on('end', callback)للاستماع إلى حدثend، والذي سيتم إصداره عندما تكتمل الاستجابة. لن تحتوي دالة رد النداء على أي معاملات، ويمكنك استخدامها لأداء أي إجراءات نهائية، مثل تسجيل أو تحليل بيانات الاستجابة. يمكنك أيضًا استخدام طريقةresponse.on('error', callback)للاستماع إلى حدثerror، والذي سيتم إصداره عندما يحدث خطأ أثناء الاستجابة. سيكون لدالة رد النداء كائنerrorكمعامل، ويمكنك استخدامه للتعامل مع الخطأ، مثل تسجيله أو رميه.
إليك مثال على كيفية إجراء طلب POST في Node.js باستخدام وحدة http:
// استيراد وحدة http
const http = require('http');
// إنشاء كائن خيارات
const options = {
hostname: 'jsonplaceholder.typicode.com',
port: 80,
path: '/posts',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Node.js'
}
};
// إنشاء كائن البيانات
const data = {
title: 'مرحبًا، العالم!',
body: 'هذه هي منشور اختبار',
userId: 1
};
// تحويل كائن البيانات إلى سلسلة
const dataString = JSON.stringify(data);
// تحديث كائن الخيارات مع طول البيانات
options.headers['Content-Length'] = dataString.length;
// إنشاء كائن الطلب
const request = http.request(options, (response) => {
// تهيئة متغير لتخزين بيانات الاستجابة
let data = '';
// الاستماع إلى حدث البيانات
response.on('data', (chunk) => {
// إلحاق الجزء بمتغير البيانات
data += chunk.toString();
});
// الاستماع إلى حدث الانتهاء
response.on('end', () => {
// تسجيل كود الحالة والرؤوس
console.log(`Status code: ${response.statusCode}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تحليل البيانات كـ JSON
const post = JSON.parse(data);
// تسجيل معلومات المنشور
console.log(`Post ID: ${post.id}`);
console.log(`Post Title: ${post.title}`);
console.log(`Post Body: ${post.body}`);
console.log(`Post User ID: ${post.userId}`);
});
// الاستماع إلى حدث الخطأ
response.on('error', (error) => {
// رمي الخطأ
throw error;
});
});
// كتابة البيانات إلى كائن الطلب
request.write(dataString);
// إنهاء كائن الطلب
request.end();
2. إجراء طلبات POST في Node.js باستخدام مكتبة axios
وحدة http هي وحدة منخفضة المستوى توفر وظائف أساسية لإجراء طلبات واستجابات HTTP. ومع ذلك، إذا كنت ترغب في استخدام وحدة أعلى مستوى وأكثر ملاءمة للمستخدم، يمكنك استخدام مكتبة axios. Axios تعد مكتبة شهيرة وقوية تتيح لك إجراء طلبات HTTP ومعالجة الاستجابات باستخدام التهيئة الوعد والانتظار (promises) ونمط async/await. تدعم Axios أيضًا ميزات مثل الاعتراضات، المحولات، مهلات، رموز الإلغاء، والمزيد.
لإجراء طلب POST في Node.js باستخدام مكتبة axios، تحتاج إلى اتباع هذه الخطوات:
- تثبيت مكتبة
axiosباستخدام أمرnpm:npm install axios. - استيراد مكتبة
axiosباستخدام وظيفةrequire. - استخدام طريقة
axios.postلإجراء طلب POST، وتمرير URL المورد كالحجة الأولى وكائن البيانات كالحجة الثانية. يمكنك أيضًا تمرير كائنconfigاختياري كالحجة الثالثة، والذي يمكن أن يحتوي على معلومات حول طلب POST، مثل الرؤوس، المعاملات، مهلة، والمزيد. ستقوم طريقةaxios.postبإرجاع وعد، والذي سيحل إلى كائنresponseأو يرفض إلى كائنerror. - استخدام طريقة
catchللتعامل مع الوعد المرفوض، وتمرير دالة رد نداء كالحجة الأولى. سيكون لدالة رد النداء كائنerrorكمعامل، والذي يحتوي على رسالة الخطأ، الرمز، الطلب، والاستجابة. يمكنك استخدام خاصيةerror.responseللوصول إلى كائن الاستجابة، وخاصيةerror.requestللوصول إلى كائن الطلب. - بدلاً من ذلك، يمكنك استخدام نمط
async/awaitلإجراء طلب POST ومعالجة الاستجابة. للقيام بذلك، تحتاج إلى استخدام كلمةasyncقبل الوظيفة التي تحتوي على طلب POST، وكلمةawaitقبل طريقةaxios.post. سيسمح لك ذلك بكتابة كود غير متزامن بطريقة متزامنة، وتعيين كائنresponseإلى متغير. يمكنك بعد ذلك استخدام كتلةtry/catchللتعامل مع أي أخطاء قد تحدث أثناء طلب POST.
إليك مثال على كيفية إجراء طلب POST في Node.js باستخدام مكتبة axios:
// استيراد مكتبة axios
const axios = require('axios');
// إنشاء كائن البيانات
const data = {
title: 'مرحبًا، العالم!',
body: 'هذه هي منشور اختبار',
userId: 1
};
// إجراء طلب POST باستخدام طريقة then
axios.post('http://jsonplaceholder.typicode.com/posts', data, {
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Node.js'
}
}).then((response) => {
// تسجيل كود الحالة والرؤوس
console.log(`Status code: ${response.status}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تسجيل معلومات المنشور
console.log(`Post ID: ${response.data.id}`);
console.log(`Post Title: ${response.data.title}`);
console.log(`Post Body: ${response.data.body}`);
console.log(`Post User ID: ${response.data.userId}`);
}).catch((error) => {
// تسجيل رسالة الخطأ والرمز
console.log(`Error message: ${error.message}`);
console.log(`Error code: ${error.code}`);
// تسجيل حالة الاستجابة والبيانات إذا كانت متاحة
if (error.response) {
console.log(`Response status: ${error.response.status}`);
console.log(`Response data: ${JSON.stringify(error.response.data)}`);
}
// تسجيل طريقة الطلب والمسار إذا كانت متاحة
if (error.request) {
console.log(`Request method: ${error.request.method}`);
console.log(`Request path: ${error.request.path}`);
}
});
// إجراء طلب POST باستخدام نمط async/await
async function createPost() {
try {
// انتظر طلب POST وعيّن كائن الاستجابة إلى متغير
const response = await axios.post('http://jsonplaceholder.typicode.com/posts', data, {
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Node.js'
}
});
// تسجيل كود الحالة والرؤوس
console.log(`Status code: ${response.status}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تسجيل معلومات المنشور
console.log(`Post ID: ${response.data.id}`);
console.log(`Post Title: ${response.data.title}`);
console.log(`Post Body: ${response.data.body}`);
console.log(`Post User ID: ${response.data.userId}`);
} catch (error) {
// تسجيل رسالة الخطأ والرمز
console.log(`Error message: ${error.message}`);
console.log(`Error code: ${error.code}`);
// تسجيل حالة الاستجابة والبيانات إذا كانت متاحة
if (error.response) {
console.log(`Response status: ${error.response.status}`);
console.log(`Response data: ${JSON.stringify(error.response.data)}`);
}
// تسجيل طريقة الطلب والمسار إذا كانت متاحة
if (error.request) {
console.log(`Request method: ${error.request.method}`);
console.log(`Request path: ${error.request.path}`);
}
}
}
// استدعاء دالة createPost
createPost();
3. إرسال واستقبال البيانات في Node.js
إرسال واستقبال البيانات في Node.js يتضمن بعض الخطوات الأساسية. عندما ترسل طلب POST في Node.js، عادةً ما ترغب في إرسال بعض البيانات إلى خادم الويب واستقبال استجابة. على سبيل المثال، قد ترغب في إرسال معلومات المستخدم لإنشاء حساب جديد واستقبال رسالة تأكيد أو رمز. أو قد ترسل بيانات ملف لتحميل ملف والحصول على عنوان URL للملف أو رسالة حالة.
للتعامل مع أنواع مختلفة من البيانات، ستحتاج إلى أساليب ووحدات مختلفة:
- بيانات JSON: إذا كانت بياناتك كائنًا بسيطًا أو مصفوفة، يمكنك تحويلها إلى سلسلة JSON باستخدام
JSON.stringify(). تنشئ هذه الطريقة سلسلة تحتوي على أزواج مفاتيح وقيم ومصفوفات، مما يجعل من السهل إرسال واستقبال البيانات. للعمل مع استجابات JSON، يمكنك استخدامJSON.parse()لتحويل الاستجابة مرة أخرى إلى كائن JavaScript أو مصفوفة. - بيانات الملفات: عند التعامل مع الملفات، يمكنك استخدام مكتبة
form-dataلإنشاء كائن بيانات النموذج وإلحاق الملف به. تحاكي هذه المكتبة سلوك نموذج HTML، مما يسمح لك بإرسال بيانات نصية وملف. ستحتاج إلى تثبيت مكتبةform-dataباستخدام npm ثم استخدامها لإنشاء وإرسال كائن بيانات النموذج. - التيارات (Streams): للتعامل مع البيانات المتدفقة، يمكنك استخدام الوحدة المدمجة
stream. تتيح لك التيارات التعامل مع بيانات كبيرة أو متواصلة دون تحميلها بالكامل في الذاكرة.
يمكنك إنشاء تيارات قابلة للقراءة، وقابلة للكتابة، أو تحويل حسب احتياجاتك. تعد التيارات مفيدة للتعامل مع البيانات الصوتية، والفيديو، أو بيانات الشبكة، ويمكنك توصيل البيانات من تيار إلى آخر للمعالجة أو الإرسال إلى الخادم.
4. استخدام Apidog لاختبار طلب POST في NodeJs
Apidog هي أداة قوية لاختبار واجهات برمجة التطبيقات. تتيح لك إنشاء وحفظ طلبات واجهة برمجة التطبيقات، تنظيمها في مجموعات، ومشاركتها مع فريقك.
إليك كيفية استخدام Apidog لاختبار طلب POST الخاص بك:
- فتح Apidog وإنشاء طلب جديد.

2. تعيين طريقة الطلب إلى POST.

3. أدخل عنوان URL للمورد الذي تريد تحديثه. أضف أي رؤوس أو معاملات إضافية تريد تضمينها ثم انقر على زر “إرسال” لإرسال الطلب.

4. تحقق من أن الاستجابة هي ما كنت تتوقعه.

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