Feathers: Öffentliche / private Dienste

Erstellt am 8. Okt. 2017  ·  4Kommentare  ·  Quelle: feathersjs/feathers

Hallo Leute! Vor allem habe ich vor kurzem Featherjs entdeckt und muss sagen, dass es wirklich schön zu verwenden ist.
Die Art und Weise, wie wir Dienste mit Rest oder Socket bereitstellen können, ist wirklich erstaunlich.
Ich verwende es, um eine REST-API für ein React-Frontend zu erstellen, aber ich bin bei ein paar Dingen immer noch ein bisschen verloren.

Ich weiß nicht, wo ich meine "privaten" Dienste hinstellen soll. Zum Beispiel habe ich einen Mailer-Dienst, der einen Übersetzungsdienst verwendet, um übersetzte E-Mails an Benutzer zu senden (wenn sie sich registrieren, Passwort vergessen, ...). Diese Dienste werden nie mit der restlichen API verfügbar gemacht, es ist ein reiner interner Dienst. Ein Benutzer kann natürlich niemals eine E-Mail senden, indem er einen POST an /mailer sendet. Trotzdem scheint es, dass ich meinen Dienst an eine Route anhängen muss und dass die Dienstdarstellung das Standardverhalten ist. Um den "externen" Zugriff auf meinen Dienst zu deaktivieren, muss ich Hooks wie Hooks.disallow('external') für alle Methoden vor dem Hook meines Dienstes verwenden, richtig? Übersehe ich etwas oder haben wir eine einfachere Möglichkeit, private Dienste zu definieren? Ich möchte auch nicht alle meine Dienste (privat und öffentlich) im selben Ordner (src/services) haben. Soll ich diese "privaten Dienste" ganz anders definieren? Fügen Sie sie beispielsweise einfach der App wie diesem app.set('mailer', mailer) hinzu und verlieren Sie die Vorteile von Service-Hooks. Können wir die Anwendung als Dienstcontainer verwenden und was ist die empfohlene Methode zum Einfügen von Diensten in andere Dienste? Holen Sie sie aus der App? Gefällt mir app.service('xxx') ?
Auch bei Verwendung der Cli und Generierung eines Dienstes. Jeder Dienst erhält eine Namensoption. Wozu dient dieser Name? Wenn wir app.service(xxx) aufrufen, wird es durch den Dienstanhang an den Pfad xxx aufgelöst, oder?

Dankeschön !

Hilfreichster Kommentar

Diese finden Sie jetzt unter Federn-plus/feathers-hooks-common#disallow .

Alle 4 Kommentare

Um den "externen" Zugriff auf meinen Dienst zu deaktivieren, muss ich Hooks wie Hooks.disallow('external') verwenden.

Ja, Sie sollten etwas verwenden wie:

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

Soll ich diese "privaten Dienste" ganz anders definieren?

Mein Vorschlag wäre, einen privaten Namespace zu haben und dann einen globalen Hook zu verwenden. Wann immer Sie einen privaten Dienst wünschen, benennen Sie ihn einfach so: /private/svc1 /private/svc2 , dann erstellen Sie einen globalen App-Hook, der disallow('external') bedingt anwendet.

Sie können Ihre Ordnerstrukturen beliebig beibehalten, nur der Name des Dienstes zählt. Aber ich mache beides. So wie alle meine DB-Dienste in einem DB-Ordner sind und ich sie auch so benennen, db/users ...


Fügen Sie sie beispielsweise einfach der App wie diesem app.set('mailer', mailer) hinzu und verlieren Sie die Vorteile von Service-Hooks.

Keine gute Idee. Bleiben Sie bei app.use()


Können wir die Anwendung als Dienstcontainer verwenden und was ist die empfohlene Methode zum Einfügen von Diensten in andere Dienste? Holen Sie sie aus der App? Gefällt mir app.service('xxx') ?

Der empfohlene Weg, und woran ich auch festhalte, ist die Verwendung von ES6-Klassen für Dienste. In diesem Fall erhalten Sie eine Setup-Methode, die das app Objekt bereitstellt.

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());

Auch bei Verwendung der Cli und Generierung eines Dienstes. Jeder Dienst erhält eine Namensoption. Wozu dient dieser Name? Wenn wir app.service(xxx) aufrufen, wird es durch den Dienstanhang an den Pfad xxx aufgelöst, oder?

Ich verwende cli in meinem Projekt nicht, da es eher eine Migration von Express als eine neue war. Daher bin ich mir bei diesem Aspekt nicht ganz sicher. Aber ja, wenn wir app.service('xyz') aufrufen, werden sie durch den Pfad aufgelöst, den Sie beim Hinzufügen des Dienstes app.use('xyz', new Xyz()) defined definiert haben

Danke @subodhpareek18 , genau das ist es 😄

Diese finden Sie jetzt unter Federn-plus/feathers-hooks-common#disallow .

Dieses Problem wurde automatisch gesperrt, da es nach dem Schließen in letzter Zeit keine Aktivität gab. Bitte öffnen Sie eine neue Ausgabe mit einem Link zu dieser Ausgabe für verwandte Fehler.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen