سنتعرف في هذا المقال على الكائن res
في إطار العمل Express وكيفية استخدامه، إذ يُعد الكائن response
"إجابة" واختصارًا res
جزءًا أساسيًا من الثنائي response-request طلب-إجابة، حيث يقوم بإرسال البيانات من الخادم إلى العميل من خلال طلبات HTTP.
ستحتاج خلال هذا المقال إلى:
- يُفضل أن يكون لديك معرفة مسبقة ببيئة Node.js، لكن ذلك ليس ضروريًا، انظر صفحة التعريف Node.js على موسوعة حسوب وننصح بقراءة صفحة طريقة الاستعمال وتشغيل الأمثلة أيضًا من التوثيق نفسه.
- معرفة بطلبات HTTP، ارجع إلى مقال مدخل إلى 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.
اقرأ أيضًا
- التعامل مع كائن الطلبية req في إطار العمل Express
- دليل استخدام Node.js وإطار العمل Express للمبتدئين
- مدخل إلى Node.js وExpress
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.