2016-11-02 12 views
0

私たちのアプリケーションには、apiを実装するいくつかのモジュールがある状況があります。これらのモジュールのそれぞれは、適切に構成されたデータディレクトリパスに依存する依存関係を持っています。これらのモジュールは、このパスが設定されるまで構築されるべきではありません。ナンシールート/モジュールを動的に登録および登録解除する

また、上記のパスの設定を含む、設定の設定と検証を実装するモジュールもあります。

私たちは何とか設定が確認できるようになるまでデータモジュールを「無効にしたい」と思います。設定は、たとえば、起動時にデータディレクトリが存在し、有効であることを確認することによって確認されます。さらに、ユーザーがconfigモジュールを介して変更を保存すると、その確認が再び行われます。要約すると、ユーザーはデータディレクトリを設定し、データモジュールはすべて有効になります。ユーザーが無効なデータディレクトリを設定した場合(または起動していて、既存のディレクトリが無効な場合)、モジュールはすべて無効になります。

pipelines.BeforeRequestにハンドラを登録しようとしましたが、役に立たなかった。ナンシーがRouteCacheの移植の一部として私たちのモジュールをインスタンス化しているとき、実際にはずっと早く失敗しています。設定されていることが確認できるまで、このインスタンス化を防ぐ必要があります。

「条件が真であるときにはこのモジュールのセットを使用し、条件が偽であればこの他のセットを使用する必要があります」と思われます。ナンシーではどうやってこのようなことをするのですか?

答えて

0

あなたが同じAPIを実装するために参照されているすべてのこれらのモジュールは、(すなわちMethod + Pattern + Actionハンドラの同じセットを定義する)おそらくあなたはそれらのすべての要求を処理するために1つのモジュールのみを使用し、使用する必要がある場合モジュールのパターンにセグメント変数(例:"/{path}/api/operation/")をキャプチャして、参照しているパス(データディレクトリ)を特定します。

次に、アクションの本体で、必要な条件が満たされているかどうかを確認できます。このような何か:別のアプローチは次のようになり

Get["/app/{directory}/api/status"] = parameters => { 
    var dataDirectory = parameters.directory; 
    // Do whatever condition checks you need with the dataDirectory value 
    // and return the appropriate HTTP status code if they are not met, 
    // otherwise continue handling the request 
    return HttpStatus.OK; 
} 

(もう一度、これらすべての要求を処理するために単一のモジュールを使用している場合)カスタムルートパラメータの制約を使用する(https://github.com/NancyFx/Nancy/wiki/Defining-routes#custom-constraintsを参照してください)。 この場合、あなたの条件が満たされないと、ルートはまったくヒットしません。

関連する問題