node_egg_serviceサービス

// サービス(サービス)
// 簡単な言葉では、サービスがこの抽象は、次のような利点を持って提供し、複雑なビジネス・シナリオにカプセル化されたビジネスロジックを実行するための抽象化レイヤである:
  より簡潔にコントローラのロジックを保ちます。
  ビジネスロジックの独立性を維持し、抽象化されたサービスは、繰り返し、複数のコントローラ呼び出すことができます。
  ロジックとプレゼンテーションの分離、書き込みテストケースに容易

// 使用シナリオ
  、ユーザディスプレイに戻るために、データベースからだけでなく、計算の特定の規則を介して取得する必要性を示す情報などの複雑なデータを扱います。または計算が完了した後、データベースを更新します。
  そのような情報へのアクセスなどなどGitHubの上のサードパーティのサービスを、呼び出します。

// 定義の-サービス
// アプリケーション/ -サービス/ user.jsの 
CONST =必要-サービス( '卵' ).service; 
クラス・サービス{UserServiceの拡張
  非同期検索を(UID){ 
    constのユーザー =待つこの .ctx.db.query(「SELECT WHEREユーザーからのUID = *「?、UID);
     戻りユーザー; 
  }
} 
module.exportsは = UserServiceの; 

// ユーザ要求は、対応するフレームのインスタンスを作成するたびにするサービスインスタンス、それはegg.Serviceを継承するので、それは我々の開発を容易にするために、以下の性質を有する:
  この.ctx:コンテキストは、現在のコンテキスト要求オブジェクトを例は、それによって私たちは便利なハンドリングパッケージ化フレームのプロパティおよび現在の要求のさまざまな方法を得ることができます。
  この.APP:現在のアプリケーションのApplicationオブジェクトの例として、そのグローバルオブジェクトとメソッドを介して、我々が得ることができるというフレームワークが提供します。
  この .service:アプリケーションで定義されたサービス、私たちは他のビジネス層にアクセスすることができ、それを通しては、と等価である。この.ctx.service。
  この.configファイル:アプリケーション実行時の設定項目。
  この.logger:Loggerは、オブジェクトの4つの方法(デバッグ、情報、警告、エラー以上 )、 コンテキストロガーで説明したように印刷ログ、使用及び効果の4つのレベルを表す


// 説明CTXサービス
  にこれを。 ctx.curlコール発信ネットワーク。
  この.ctx.service.otherServiceは、他のサービスを呼び出します。
  .ctx.dbがデータベース呼び出しなどを開始し、DBは他のプラグインモジュールのAppに事前に搭載されるかもしれ


// サービスファイルアプリ/サービスディレクトリに配置する必要があり、ディレクトリがマルチレベルをサポートすることができ、訪問の時間は、ディレクトリ名のカスケードを介してアクセスすることができます。

  アプリケーション /service/biz/user.js => ctx.service.biz.user 
  アプリケーション/ -サービス/ sync_user.js => ctx.service.syncUser 
  アプリケーション /service/HackerNews.js => ctx.service.hackerNews
 // サービスファイルはmodule.exportsは仕方によって返される必要がある唯一のクラスを含めることができます。
// サービスクラスは、方法によって定義される必要がある親はegg.Serviceでなければなりません。
// サービスは、オブジェクトが要求レベル単一の実施形態ではない、フレーム遅延インスタンスは、各第一のアクセス要求をctx.service.xx、サービスが現在の要求this.ctxコンテキストによって得ることができます。


// 使用カールhttp://127.0.0.1:7001/user/1234-Service 

// アプリケーション/ router.js 
module.exportsはアプリケーション= => {
  app.router.get( '/ユーザ/:ID' 、controller.user.info)。
}。

// アプリ/コントローラ/ user.jsの 
CONSTコントローラ=( '卵'が必要).Controllerと、
クラスUserControllerでは、コントローラ{延び
  非同期情報(){ 
    CONST {CTXは} = この; 
    CONSTのuserId = ctx.params.id。
    CONSTユーザー情報 = のawait ctx.service.user.find(USERID)。
    ctx.body = のUserInfo。
  } 
} 
module.exportsは = UserControllerで。

// アプリ/サービス/ user.jsの 
サービスのconst =( '卵'が必要です).Serviceを。 
クラスUserServiceのは、サービスを拡張し、{ 
  //デフォルトコンストラクタの必要はありません提供されます。
  // コンストラクタ(CTX){ 
  //    スーパー(CTX);あなたは、コンストラクタで何らかの処理を行う必要がある場合は、使用this.ctx`後ろ`確保するために、これらの単語を持っている必要があります。
  //    // this.ctxが直接CTXすることにより取得することができる
  。//    また、アプリから直接取得する// this.app 
  @ } 
  非同期検索(UID){
     // 我々は、ユーザIDの詳細を取得するために、データベースからユーザーを得た場合情報 
    constが=ユーザーが待っています。この .ctx.db.query(「?SELECT *は、ユーザーからのuid =」、UIDを);
     //は、いくつかの複雑な計算がここにあると仮定して、必要な情報を返します。
    await写真= CONST この.getPicture(UID);
     戻り{ 
      名:user.user_name、
      年齢:user.age、
      絵、 
    }; 
  }
  getPicture(UID){非同期
    CONST結果 =待つこの( `HTTP .ctx.curl // ; 'JSON'}:photoserver / UID = $ {UID}`、{データ型)
    リターンresult.data。
  } 
} 
module.exportsは = UserServiceの。

 

おすすめ

転載: www.cnblogs.com/JunLan/p/12536282.html