Feathers: パブリック/プライベートサービス

作成日 2017年10月08日  ·  4コメント  ·  ソース: feathersjs/feathers

やあみんな! まず第一に、私は最近feathersjsを発見しました、そして私はそれが使うのが本当に素晴らしいと言わなければなりません。
レストまたはソケットを使用してサービスを公開する方法は本当に素晴らしいです。
私はそれを使ってReactフロントエンド用のRESTAPIを構築していますが、それでもいくつかの点で少し迷っています。

「プライベート」サービスをどこに置くべきかわかりません。 たとえば、翻訳サービスを使用して翻訳された電子メールをユーザーに送信するメーラーサービスがあります(ユーザーが登録するとき、パスワードを忘れたなど)。 このサービスは、残りのAPIで公開されることはなく、純粋に内部サービスです。 もちろん、ユーザーが/ mailerにPOSTを送信して電子メールを送信することはできません。 それでも、サービスをルートにアタッチする必要があり、サービスの説明がデフォルトの動作であるようです。 サービスへの「外部」アクセスを無効にするには、サービスをフックする前に、すべてのメソッドでhooks.disallow( 'external')などのフックを使用する必要があります。 私は何かが足りないのですか、それともプライベートサービスを定義するためのより簡単な方法がありますか? また、すべてのサービス(プライベートとパブリック)を同じフォルダー(src / services)に入れるのも好きではありません。 この「プライベートサービス」をまったく別の方法で定義する必要がありますか? 同様に、このapp.set( 'mailer'、mailer)のようにアプリに追加するだけで、サービスフックのメリットが失われます。 アプリケーションをサービスコンテナとして使用できますか?また、サービスを他のサービスに注入するための推奨される方法は何ですか? アプリからそれらを取得しますか? app.service( 'xxx')のように?
また、CLIを使用してサービスを生成する場合。 すべてのサービスには名前オプションがあります。 この名前の用途は何ですか? app.service(xxx)を呼び出すと、パスxxxに接続されたサービスによって解決されます。

ありがとうございました !

最も参考になるコメント

それらはfeathers-plus / females-hooks-common#disallowで見つけることができます。

全てのコメント4件

サービスへの「外部」アクセスを無効にするには、hooks.disallow( 'external')のようなフックを使用する必要があります

はい、次のようなものを使用する必要があります。

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

この「プライベートサービス」をまったく別の方法で定義する必要がありますか?

私の提案は、プライベート名前空間のようにしてから、グローバルフックを使用することです。 プライベートサービスが必要な場合は、 /private/svc1 /private/svc2ように名前を付けてから、条件付きでdisallow('external')適用するグローバルアプリフックを作成します。

フォルダ構造は好きなように保持できます。重要なのはサービス名だけです。 しかし、私は両方を行います。 すべてのDBサービスが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を使用していません。これは、新しいものというよりもExpressからの移行であるためです。 ですから、その側面については完全にはわかりません。 しかし、はい、 app.service('xyz')を呼び出すと、サービスを追加するときに定義したパスによってそれらが解決されますapp.use('xyz', new Xyz())

ありがとう@ subodhpareek18 、それはまさにそれです😄

それらはfeathers-plus / females-hooks-common#disallowで見つけることができます。

この問題は、クローズされた後、最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、この問題へのリンクを含む新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価