2017-04-06 52 views
2

我可以肯定地圖中可見,可變換我喜歡的任何方式的反應,但經歷了documentation而我碰到如何在向JSON的HTTP請求之後通過angular-in-memory-web-api來變形返回到Observable的響應?

responseInterceptor

所以來了,我不知道如果我可以把一些配置,並得到一個JSON響應本身無需編寫我的額外功能。

關於responseInterceptor或如何使用它沒有多少書面。 如果不是這樣,那麼是否有其他方式使用angular-in-memory-web-api本身來執行此操作?

回答

1

之前它返回到可觀察到的這種攔截器的幫助下

You can morph the response returned by the default HTTP methods, called by collectionHandler , to suit your needs by adding a responseInterceptor method to your InMemoryDbService class. The collectionHandler calls your interceptor like this:

responseOptions = this.responseInterceptor(responseOptions, requestInfo); 

爲了測試它的工作,你可以將此代碼添加到您可以修改響應您的InMemoryDbService

responseInterceptor(res: ResponseOptions, ri: RequestInfo):ResponseInterceptor { 
    console.log("call responseInterceptor"); 
    return res; 
} 
+0

在測試上述內容時,我看到'ResponseOptions'類型的'res'返回,但函數期望'ResponseInterceptor'類型返回。這也被我的typeScript標記。 –

+0

我正在嘗試你的建議,在'responseInterceptor()'我看到'res'內部,我修改它並使用res中的數據創建不同的JSON對象並返回新創建的'object'。但是我做HTTP請求的地方說:'http.get(url).map(reponse => // somecode)。 catch((error)=> log error //)'。我一直得到這個錯誤:'{「ok」:false,「statusText」:「未知狀態」,「url」:「api/sessionData/1」}'。我究竟做錯了什麼?不應該修改responseInterceptor()的返回值? –

+0

嘿,它的工作我猜。稍後會確認你。 –

0

Angular的內存中web-api和ResponseInterceptor用於在測試場景中僞造/操縱請求。

畢竟,我不清楚,你的目的是什麼。

+0

如果攔截XHR調用,不應該是'requestInterceptor'嗎?我只想知道是否有一種方法可以在HTTP請求(由angular-in-memory-web-api處理)之後返回JSON(僅僅是因爲我遇到了'responseInterceptor')而不是一個Observable。 –

+0

你說得對,我想。我更新了我的答案。儘管如此,你試圖達到的目標並不十分清楚。你可能有一些代碼可以告訴我們嗎?這將有助於讓事情更清楚。 – Hinrich

+0

我想修改返回的observable中包含的數據'(response)'。讓它像我想要的JSON格式。所以我猜,這可以在'responseInterceptor()'內完成。 –

相關問題