Feathers: خدمات عامة / خاصة

تم إنشاؤها على ٨ أكتوبر ٢٠١٧  ·  4تعليقات  ·  مصدر: feathersjs/feathers

مرحبا شباب! بادئ ذي بدء ، اكتشفت مؤخرًا feathersjs ولا بد لي من القول إنه لطيف حقًا للاستخدام.
الطريقة التي يمكننا بها عرض الخدمات بالراحة أو المقبس مدهشة حقًا.
أنا أستخدمه لإنشاء REST api لواجهة React الأمامية ، لكنني ما زلت ضائعًا في بعض الأشياء.

لا أعرف أين أضع خدماتي "الخاصة". على سبيل المثال ، لدي خدمة بريد ، باستخدام خدمة الترجمة لإرسال رسائل بريد إلكتروني مترجمة إلى المستخدمين (عند التسجيل ، نسيت كلمة المرور ، ...). لن يتم الكشف عن هذه الخدمات أبدًا مع بقية واجهات برمجة التطبيقات ، إنها خدمة داخلية بحتة. لن يتمكن المستخدم ، بالطبع ، من إرسال بريد إلكتروني عن طريق إرسال بريد إلى / مرسل بريد. ولكن مع ذلك ، يبدو أنني بحاجة إلى إرفاق خدمتي بطريق وأن عرض الخدمة هو السلوك الافتراضي. لتعطيل الوصول "الخارجي" إلى خدمتي ، يجب أن أستخدم الخطافات مثل hooks.disallow ("خارجي") في كل الطرق قبل ربط خدمتي ، أليس كذلك؟ هل فاتني شيء أو هل لدينا طريقة أبسط لتعريف الخدمات الخاصة؟ لا أرغب أيضًا في الحصول على جميع خدماتي (الخاصة والعامة) في نفس المجلد (src / services). هل يجب أن أعرّف هذه "الخدمات الخاصة" بطريقة مختلفة تمامًا؟ مثل ، ما عليك سوى إضافتها إلى التطبيق مثل هذا app.set ('mailer' ، mailer) وفقد ميزة خطافات الخدمة. هل يمكننا استخدام التطبيق كحاويات خدمات وما هي الطريقة الموصى بها لضخ الخدمات في الخدمات الأخرى؟ احصل عليها من التطبيق؟ مثل app.service ("xxx")؟
أيضًا ، عند استخدام CLI وإنشاء خدمة. تحصل كل خدمة على خيار الاسم. ما هو استخدام هذا الاسم؟ عندما نسمي app.service (xxx) ، يتم حله من خلال إرفاق الخدمة بالمسار xxx ، أليس كذلك؟

شكرا لك !

التعليق الأكثر فائدة

يمكنك العثور عليها الآن في feathers-plus / feathers-hooks-common # disallow .

ال 4 كومينتر

لتعطيل الوصول "الخارجي" إلى خدمتي ، يجب أن أستخدم الخطافات مثل hooks.disallow ('خارجي')

نعم ، يجب أن تستخدم شيئًا مثل:

app.use('/mypath', myservice)
app.service('/mypath').hooks({
  before: { all: [hooks.disallow('external')] } 
})

هل يجب أن أعرّف هذه "الخدمات الخاصة" بطريقة مختلفة تمامًا؟

اقتراحي هو أن يكون لديك مثل مساحة اسم خاصة ثم استخدام خطاف عام. عندما تريد خدمة خاصة ، قم فقط بتسميتها مثل /private/svc1 /private/svc2 ، ثم أنشئ رابط تطبيق عالمي يطبق بشكل مشروط disallow('external') .

يمكنك الاحتفاظ بهياكل المجلدات كما يحلو لك ، ما يهم هو اسم الخدمة فقط. لكني أفعل كليهما. مثل جميع خدمات قاعدة البيانات الخاصة بي موجودة في مجلد DB وأقوم أيضًا بتسمية مساحة لهم مثل db/users ...


مثل ، ما عليك سوى إضافتها إلى التطبيق مثل هذا app.set ('mailer' ، mailer) وفقد ميزة خطافات الخدمة.

ليست فكرة جيدة. استمر في التمسك بـ app.use()


هل يمكننا استخدام التطبيق كحاويات خدمات وما هي الطريقة الموصى بها لضخ الخدمات في الخدمات الأخرى؟ احصل عليها من التطبيق؟ مثل app.service ("xxx")؟

الطريقة الموصى بها ، وما ألتزم به أيضًا ، هي استخدام فئات ES6 للخدمات ، وفي هذه الحالة تحصل على طريقة إعداد توفر الكائن app .

export default class Service {
 setup(app) {
    this.app = app;
    this.svc2 = app.service('svc2');
  }

  create(data) {
    // use this.svc2 here now 
  }
}

app.use('/service', new Service());

أيضًا ، عند استخدام CLI وإنشاء خدمة. تحصل كل خدمة على خيار الاسم. ما هو استخدام هذا الاسم؟ عندما نسمي app.service (xxx) ، يتم حله من خلال إرفاق الخدمة بالمسار xxx ، أليس كذلك؟

لا أستخدم cli في مشروعي لأنه كان عبارة عن ترحيل من البريد السريع أكثر من كونه جديدًا. لذلك لست متأكدًا تمامًا من هذا الجانب. لكن نعم عندما نطلق على app.service('xyz') ، فإنه يحلها من خلال المسار الذي حددته عند إضافة الخدمة app.use('xyz', new Xyz())

شكرا لك @ subodhpareek18 ، هذا هو بالضبط 😄

يمكنك العثور عليها الآن في feathers-plus / feathers-hooks-common # disallow .

تم قفل هذه المشكلة تلقائيًا نظرًا لعدم وجود أي نشاط حديث بعد إغلاقه. الرجاء فتح مشكلة جديدة مع ارتباط لهذه المشكلة للأخطاء ذات الصلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات