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

السؤال

نشر

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

var express = require('express');
var jade = require('jade');
var http = require("http");

var app = express();
var server = http.createServer(app);

app.get('/', function(req, res) {
    res.render('index.jade', context);
});

app.post('/test', function(req, res) {
    res.redirect('/');
});

أرغب بالتحقق من بعض القيم عند المسار test وفي حال كانت غير صحيحة، يجب أن يتم إعادة التوجيه إلى المسار الرئيسي / مع إضافة بعض المتغيرات إلى المسار (كرسالة بشير إلى فشل التحقق). كيف يمكنني تحقيق ذلك وإضافة هذه القيم إلى التابع redirect ؟

Recommended Posts

  • 1
نشر

يوجد عدّة طرق لتمرير المتغيرات عبر مسارات التوجيه في node.js والأفضل بينها هو عن طريق query string أي في المسار مباشرةً من خلال إضافة العلامة ? إلى المسار ووضع اسم المتغيّر وقيمته.

ولكن عندها يجب عليك التأكد من أن قيم هذه المتغيرات سيتم ترميزها وفك ترميزها بالشكل الصحيح ( encodeURIComponent ) لأنه لا يمكنك كتابة أي نص ترغب به وتقوم بإضافته بشكل مباشر إلى الرابط.

فيصبح الكود بالشكل التالي:

app.port('/test', function(req, res) {
  var string = encodeURIComponent('نضع هنا القيم المراد تمريرها');
  res.redirect('/?check=' + string);
});

وبعد ذلك، يمكنك الحصول على قيم هذه المتغيرات من خلال التابع req.query بالشكل التالي:

app.get('/', function(req, res) {

  var testValues = req.query.check;
  .....

});

كما يمكنك استخدام الحزمة url الموجودة في node.js لسهولة إنشاء query string في حال كان لديك أكثر من قيمة يجب أن تقوم بتمريرها من خلال التابع url.format بالشكل التالي:

const url = require('url');    

app.post('/test', function(req, res) {

    res.redirect(url.format({
       pathname:"/",
       query: {
          "variable1": 1,
          "variable2": 2,
          "check":"test value"
        }
     }));

 });

وفي حال كنت تستخدم نسخة من node.js أعلى من النسخة السابعة، يمكنك استخدام الحزمة queryString بهذا الشكل:

const querystring = require('querystring');   

app.post('/test', function(req, res) {

      const query = querystring.stringify({
          "variable1": 1,
          "variable2": 2,
          "check":"test value"
      });
      res.redirect('/?' + query);
 });

كما يوجد طرق أخرى لتحقيق ذلك من خلال استخدام الجلسات sessions أو req.flash ولكن في النسخ الحديثة من إطار عمل express من الممكن أن تحتاج استخدام حزم أخرى إضافية لتحقيق ذلك من خلالها.

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

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

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...