Feathers: Services publics / privés

Créé le 8 oct. 2017  ·  4Commentaires  ·  Source: feathersjs/feathers

Salut les gars! Tout d'abord, j'ai découvert récemment les plumes et je dois dire que c'est très agréable à utiliser.
La façon dont nous pouvons exposer des services avec rest ou socket est vraiment incroyable.
Je l'utilise pour créer une API REST pour une interface React, mais je suis encore un peu perdu avec quelques éléments.

Je ne sais pas où mettre mes services "privés". Par exemple, j'ai un service de messagerie, utilisant un service de traduction pour envoyer des emails traduits aux utilisateurs (lors de leur inscription, mot de passe oublié, ...). Ces services ne seront jamais exposés avec le reste de l'API, c'est purement un service interne. Un utilisateur ne pourra bien entendu jamais envoyer un email en envoyant un POST à ​​/mailer. Mais encore, il semble que j'ai besoin d'attacher mon service à une route et que l'exposition de service est le comportement par défaut. Pour désactiver l'accès "externe" à mon service, je dois utiliser des hooks comme hooks.disallow('external') sur toutes les méthodes avant le hook de mon service, non ? Ai-je raté quelque chose ou avons-nous un moyen plus simple de définir les services privés ? Je n'aime pas non plus avoir tous mes services (privés et publics) dans le même dossier (src/services). Dois-je définir ces "services privés" d'une manière complètement différente ? Comme, il suffit de les ajouter à l'application comme app.set('mailer', mailer) et de perdre le bénéfice des crochets de service. Peut-on utiliser l'application comme conteneur de services et quelle est la méthode recommandée pour injecter des services dans d'autres services ? Les obtenir à partir de l'application ? Comme app.service('xxx') ?
De plus, lors de l'utilisation du cli et de la génération d'un service. Chaque service a une option de nom. A quoi sert ce nom ? Lorsque nous appelons app.service(xxx), cela se résout par le service attaché au chemin xxx, non ?

Merci !

Commentaire le plus utile

Vous pouvez les trouver maintenant sur plums-plus/feathers-hooks-common#disallow .

Tous les 4 commentaires

Pour désactiver l'accès "externe" à mon service, je dois utiliser des crochets comme hooks.disallow('external')

Oui, vous devriez utiliser quelque chose comme :

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

Dois-je définir ces "services privés" d'une manière complètement différente ?

Ma suggestion serait d'avoir un espace de noms privé, puis d'utiliser un crochet global. Chaque fois que vous voulez un service privé, nommez-les simplement comme /private/svc1 /private/svc2 , puis créez un crochet d'application global qui applique sous condition disallow('external') .

Vous pouvez conserver vos structures de dossiers comme bon vous semble, seul le nom du service compte. Mais je fais les deux. Comme tous mes services DB sont dans un dossier DB et je les nomme également comme si db/users ...


Comme, il suffit de les ajouter à l'application comme app.set('mailer', mailer) et de perdre le bénéfice des crochets de service.

Pas une bonne idée. Continuez à vous en tenir à app.use()


Peut-on utiliser l'application comme conteneur de services et quelle est la méthode recommandée pour injecter des services dans d'autres services ? Les obtenir à partir de l'application ? Comme app.service('xxx') ?

La méthode recommandée, et à laquelle je m'en tiens également, consiste à utiliser les classes ES6 pour les services, auquel cas vous obtenez une méthode de configuration qui fournit l'objet 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());

De plus, lors de l'utilisation du cli et de la génération d'un service. Chaque service a une option de nom. A quoi sert ce nom ? Lorsque nous appelons app.service(xxx), cela se résout par le service attaché au chemin xxx, non ?

Je n'utilise pas cli dans mon projet car il s'agissait plus d'une migration d'express que d'une nouvelle. Je ne suis donc pas tout à fait sûr de cet aspect. Mais oui lorsque nous appelons app.service('xyz') , il les résout par le chemin que vous avez défini lors de l'ajout du service app.use('xyz', new Xyz())

Merci @subodhparek18 , c'est exactement ça 😄

Vous pouvez les trouver maintenant sur plums-plus/feathers-hooks-common#disallow .

Ce problème a été automatiquement verrouillé car il n'y a eu aucune activité récente après sa fermeture. Veuillez ouvrir un nouveau problème avec un lien vers ce problème pour les bogues liés.

Cette page vous a été utile?
0 / 5 - 0 notes