سؤال

باستخدام جهاز التوجيه الحديدي، من الممكن إضافة خطافات مثل:

// this hook will run on almost all routes
Router.before(mustBeSignedIn, {except: ['login', 'signup', 'forgotPassword']});

// this hook will only run on certain routes
Router.before(mustBeAdmin, {only: ['adminDashboard', 'adminUsers', 'adminUsersEdit']});

يرى: https://github.com/EventedMind/iron-router#using-hooks

لكن الوثائق لا توضح كيفية جعل هذه الخطافات "من جانب الخادم".

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

هل كانت مفيدة؟

المحلول

جهاز التوجيه الحديدي هو نفسه تمامًا على كل من العميل والخادم ويمكن إجراء الإعلانات على دليل/ملف متاح لكل من العميل والخادم.

بشكل افتراضي، تكون التوجيهات المعلنة للعميل.إذا كنت تريد أن يكون المسار من جانب الخادم، فأنت تعلن ذلك صراحةً من خلال تضمينه where: 'server'.

مأخوذة من المستندات الرسمية:

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

Router.map(function () {
  this.route('serverRoute', {
    where: 'server',

    action: function () {
      // some special server side properties are available here
    }
  });
});

لاحظ أنه يجب وضع المكان في Router.map، وليس على وحدة التحكم.

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

Router.map(function () {
  this.route('serverFile', {
    where: 'server',
    path: '/files/:filename',

    action: function () {
      var filename = this.params.filename;

      this.response.writeHead(200, {'Content-Type': 'text/html'});
      this.response.end('hello from server');
    }
  });
});

كما ترون، هناك اصطلاح تسمية واحد فقط، لذلك يمكنك ذكر شيء مثل هذا:

Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});

أو

Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});

تماما كما تفعل عادة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top