اذهب إلى المحتوى

التعامل مع كائن الإجابة res على طلبية HTTP في إطار العمل Express


أروى عفان

سنتعرف في هذا المقال على الكائن res في إطار العمل Express وكيفية استخدامه، إذ يُعد الكائن response "إجابة" واختصارًا res جزءًا أساسيًا من الثنائي response-request طلب-إجابة، حيث يقوم بإرسال البيانات من الخادم إلى العميل من خلال طلبات HTTP.

ستحتاج خلال هذا المقال إلى:

اختبار التابعين ()status. و ()append.

يرسل التابع ()send. المُستخدَم في الكائن res البيانات المعرفة في حقل الوسيط إلى طرف العميل. يتعامل هذا التابع مع الوسطاء سواء كانت سلسلة، أو مصفوفة، أو كائن.

استخدم طلب GET مع تحديد وجهته كالتالي 'home/'، إليك طريقة كتابة الشيفرة في ملف index.js:

app.get('/home', (req, res) => {
 res.send('Hello World!'))
});

نلاحظ أن الطلب GET يقبل تمرير دالة رد نداء إليه تقبل الوسيطين res و req؛ ويمكنك استخدام الكائن res آنذاك لإرسال السلسلة "!Hello World" إلى طرف العميل.

يُعَّرف التابع ()send. ترويساته بشكل محلي بناءً على نوع البيانات Content-Type وطولها Content-Length.

يُحَدد الكائن res حالة شيفرات HTTP عن طريق التابع ()status.، لذا استدعيه مع الكائن res، بتمرير أحد شيفرات حالة HTTP كوسيط:

res.status(404).send('Not Found');

يحدد التابع ()status. رمز حالة HTTP بالقيمة 404، والتي تخبر العميل بأن البيانات أو الصفحة المطلوبة غير موجودة "not found". يمكنك إرسال شرح للرمز للعميل باستخدام التابع ()send..

يُدمَج عمل التابعين status و send في التابع ()sendStatus. لسهولة التنفيذ:

res.sendStatus(404);

نلاحظ أن التابع ()sendStatus. يحدد رمز حالة HTTP بالرمز 404 ويرسلها إلى طرف العميل بخطوة واحدة، أو باستدعاء واحد.

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

استخدم التابع ()append. لتعريف ترويسة في استجابة أو رد الخادم، عن طريق تمرير الترويسة كوسيط أول عند استدعاء التابع ()append.، وتمرير قيمة في الوسيط الثاني، كما يلي:

res.append('Content-Type', 'application/javascript; charset=UTF-8');
res.append('Connection', 'keep-alive')
res.append('Set-Cookie', 'divehours=fornightly')
res.append('Content-Length', '5089990');

نلاحظ أن التابع ()append. يقبل ترويسات قياسية وغير قياسية في السطر الواحد.

التعرف على عمل التوابع redirect و render و method

يوجه التابع ()redirect. العميل إلى صفحة أخرى، عند استدعائه من طرف الكائن res. أي أنه عندما يُدخل المستخدم معلومات تسجيل الدخول في طرف العميل، يسهل التابع ()redirect. إعادة توجيهه إلى الصفحة المطلوبة.

استدعِ التابع ()redirect. مع الكائن res كما يلي:

res.redirect('/sharks/shark-facts')

يوجه التابع ()redirect. العميل إلى الوجهة 'sharks/shark-facts/'.

أما التابع ()render. فيقبل ملف HTML في حقل الوسيط ويرسله إلى العميل، ويقبل وسيطًا ثانيًا هو كائن محلي مع خاصيات محددة لتعريف الملف المرسل إلى طرف العميل.

طَبق طلب GET مع تحديد الوجهة إلى 'shark-game/':

app.get('/shark-game', (req, res) => {
 res.render('shark.html', {status: 'good'});
});

لاحظ أن استدعاء التابع ()render. مع الكائن res يؤدي إلى إرسال ملف HTML التالي shark.html مع خاصية الحالة status إلى العميل.

ينهي التابع ()end. عمل حلقة الإجابة response cycle، وينصح باستدعائه في أخر خطوة عند إرسال بيانات إلى طرف العميل.

استدعِ التابع ()sentStatus. مترافقًا مع التابع ()end. كالتالي:

res.sendStatus(404).end();

يكمل التابع ()end. رد الخادم ويرسله إلى طرف العميل بمجرد أن يحدد التابع ()sentStatus. رمز حالة HTTP إلى 404، ونلاحظ مما سبق أن الكائن res يسهل عملية إرسال البيانات والملفات أيضًا.

دعنا نتعرف على طرق أخرى للتعامل مع الملفات باستخدام الكائن res.

التعامل مع الملفات باستخدام الكائن res

يوفر التابع ()sendFile.إمكانية إرسال ملفات HTML و CSS و JavaScript إلى العميل، عند استدعائه مع الكائن res.

استدعِ الطلب GET مع ضبط الوجهة إلى 'gallery/:fileName/':

// GET https://sharks.com/gallery/shark-image.jpg

app.get('/gallery/:fileName', function (req, res, next) {

 var options = {
  root: path.join(__dirname, 'public')
 };

 res.sendFile(req.params.fileName, options, function (err) {
  if (err) next(err);
  else console.log('Sent:', fileName);
 });
});

لاحظ أن المتغير options هو كائن فيه الخاصية root التي تشير إلى المسار المطلق للمجلد العام public بجمع ‎__dirname مع public عبر التابع path.join()‎.

تشمل محتويات المجلد العام public كلًا من ملفات HTML و CSS و JavaScript، ويقبل التابع ()sendFile المتغير options كوسيط ثاني، ومعالج للأخطاء كوسيط ثالث، وهكذا تُرسل الملفات المخزنة في مجلد public إلى طرف العميل.

يمكنك استدعاء التابع ()download. مع الكائن res لتسهيل التعامل مع الملفات، فأضف معالجة لطلب GET المرسل إلى الوجهة 'gallery/:fileName/' كالتالي:

// GET https://sharkss.com/gallery/shark-image.jpg

app.get('/gallery/:fileName', function(req, res){
 const file = `${__dirname}/public/${req.params.fileName}`;
 res.download(file);
});

يحث التابع ()download. طرف العميل على تنزيل ملف ما ويرفق ترويسات مناسبة لنوع الملف، وذلك كله باستدعاء واحد.

استخدم التابع ()type. عند استدعاء الكائن res لتحديد قيمة Content-Header بتحديد صيغة الملف كالتالي:

res.type('png')       // => 'image/png'
res.type('html')       // => 'text/html'
res.type('application/json') // =>'application/json'

لاحظ أن التابع ()type. يظهر نوع الملف مع قيمته في Content-Header.

ختاما

تعرفنا في هذا المقال على الكائن res، ومحتوياته من توابع تسهل إرسال البيانات والملفات عبر طلبات HTTP المرسلة من خادم Express إلى طرف العميل.

لمزيد من المعلومات عن الكائن res يرجى الإطلاع على التوثيق الرسمي من موقع Express.

للحصول على المساعدة والدعم يمكنك إضافة سؤالك في قسم الأسئلة والأجوبة في أكاديمية حسوب.

ترجمة- وبتصرف للمقال How To Use the res Object in Express لصاحبه William Le.

اقرأ أيضًا

 


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...