2016-10-04 20 views
4

私たちはプロジェクトでAngular 2を使用しています。これまでは開発中の当社のデータサービスでin-memory-web-apiを使用します。角2:複数のHTTPサービス

app.module.ts

imports: [ 
    HttpModule, 
    InMemoryWebApiModule.forRoot(MockData), 
    ... 
] 

data.service.ts

constructor(private http: Http) { } 

今それは時間です実際のデータを取得します。しかし、私たちはモックデータを一度に置き換えることはできません。

constructor(private fakeHttp: FakeHttp, /* this one use in-memory-api */ 
      private http: Http /* this one goes to real remote server */) { } 

このように、私は徐々にプロジェクトの進行に合わせて模擬データを移動できますか?

答えて

7

醜い「2つのHTTP」を実行する代わりに、angular-in-memory-web-apiには2つのオプションがあります。

0.1.3からは、見つからないすべてのコレクション呼び出しを通常のXHRに転送する設定プロパティがあります。

InMemoryWebApiModule.forRoot(MockData, { 
    passThruUnknownUrl: true 
}) 

これが行うのは、コレクションを見つけることができない要求を実際のXHRに転送することです。したがって、1つの選択肢は、メモリ内のデータベースからコレクションを削除することです(requried)。

class MockData implements InMemoryDbService { 
    createDb() { 
    let cats = []; 
    let dogs = []; 
    return { 
     cats, 
     // dogs 
    }; 
    } 
} 

あなたは、DBから実際のバックエンドへのインメモリう今前方すべての犬の要求をdogsコレクションを削除すると。

これは単なるコレクションレベルの修正です。しかし、さらに細かい制御が必要な場合は、メソッド・インターセプタを使用できます。

MockDataクラスでは、getメソッドをオーバーライドするには、MockDataクラスにHttpMethodInterceptorArgs引数を追加します。一例として、次のように

class MockData implements InMemoryDbService { 
    get(args: HttpMethodInterceptorArgs) { 
    // do what you will here 
    } 
} 

HttpMethodInterceptorArgsの構造は(あなたがそれで何ができるかのアイデアを持っているだけのよう)です

HttpMethodInterceptorArgs: { 
    requestInfo: { 
    req: Request (original request object) 
    base 
    collection 
    collectionName 
    headers 
    id 
    query 
    resourceUrl 
    } 
    passThruBackend: { 
    The Original XHRBackend (in most cases) 
    } 
    config: { 
    this is the configuration object you pass to the module.forRoot 
    } 
    db: { 
    this is the object from creatDb 
    } 
} 

、ここにあなたならば、それは次のようになります。ちょうどすべてのリクエストを転送しました

get(args: HttpMethodInterceptorArgs) { 
    return args.passthroughBackend.createConnection(args.requstInfo.req).response 
} 
+0

クール!正確に私は探しています。ありがとうございました!! – okeydoky