2017-01-29 10 views
16

私はAngular 2アプリケーションをJava Spring Bootバックエンドと統合しようとしています。現時点では、私はAngular 2ファイルをsrc/main/resources/staticの下に置きます(AngularとSpringの両方のアプリケーションが同じポート上で同じアプリケーションで実行されることを意味します)。角2 HTTP GET 404が見つかりませんURL

私がやろうとしていますHTTP GETこのように:それは誤解を招くエラーにつながるので

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Language } from '../model/language'; 
import { Observable } from 'rxjs/Rx'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class LanguageService { 

    constructor(private http: Http) { } 

    private langUrl = 'api/languages'; 

    getLanguages() : Observable<Language[]> { 
     return this.http.get(this.langUrl) 
         .map((res:Response) => res.json()) 
    } 
} 

私は意図的に、取得からのエラー処理コードを削除しました。私は何を得る は次のとおりです。

Error: Uncaught (in promise): Error: Error in :0:0 caused by: Response with status: 404 Not Found for URL: api/languages 
Error: Error in :0:0 caused by: Response with status: 404 Not Found for URL: api/languages 
    at ViewWrappedError.BaseError [as constructor] (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:1179:31) [angular] 
    at ViewWrappedError.WrappedError [as constructor] (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:1232:20) [angular] 
    at new ViewWrappedError (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:6552:20) [angular] 
//more output here - will provide full stack trace if needed 

URL http://localhost:8080/api/languagesは、Javaの春コントローラによって処理され、私はポストマンやWebブラウザ経由でGETならば、それは動作します。

私の印象はので、404エラーは、サーバーから来ていなかったということです。私は、サーバーのログ

  • のあらゆるアクティビティが表示されない

    • サーバ側はアップかである場合、私は関係なく、同じ結果を得ますダウン。

    私のAngular 2構成には問題があると思いますが、ドキュメントには何もヒントがありません。

    http://localhost:8080/api/languages/api/languagesapi/languagesanother/working/server/endpointなどの異なるURLを試しましたが、すべて同じエラーにつながります。

    私はさらにhereのようにJSONPを使用しようとしましたが、JSONPが言語サービスコンストラクタに挿入されていないという別の問題がありました(その問題は別の話です)。

    私はsimilar questionを見つけましたが、これまでに決して答えられませんでした。

    この問題の解決方法や類似の問題が発生した場合は、ヘルプやコメントをいただければ幸いです。

    は(単にF12を押すと、[ネットワーク]タブを選択します)あなたがHTTPリクエストとレスポンスをあなたのアプリケーションの実行を見ることができるクロムまたはFirefoxで

  • 答えて

    38

    このエラーの理由は、私は私のための基礎としてAngular Tour of Heroes applcationを使用したことだった、と私はapp.module.tsから

    "angular-in-memory-web-api": "~0.2.4", 
    

    InMemoryWebApiModule依存関係を削除しませんでした。このため、すべてのリクエストはInMemoryWebApiModuleによって傍受されました(私はTour of Heroesチュートリアルで説明されているように直接呼び出さなかったにもかかわらず)、そのため、ブラウザデバッガの[Network]タブにXMLHttpRequestsが表示されませんでした。

    私はそれが正常に働き始め、package.jsonnode_modulesディレクトリから依存関係を削除した後は、しかし、私は活字体に直接JSONを解析するサービスコードを変更する必要がありました。このようなオブジェクト:

    getLanguages(): Promise<Language[]> { 
        return this.http.get(this.langUrl) 
         .toPromise() 
         .then(response => response.json() as Language[]) 
         .catch(this.handleError); 
    } 
    

    これは、初心者の間違いですが、この投稿が2時間の研究を誰かに保存してくれることを願っています。

    +6

    これを追加するには、メモリ内のWeb APIを処理したくないURLを通過するように設定することができます。そのため、削除する必要はありません。この[answer](http://stackoverflow.com/questions)/41076251/how-i-can-bypass-angular-in-memory-web-api-for-a-specific-url?answertab = active#tab-top) – djboardman

    +0

    @djboardman、私は同意する、良い点!すべてのAPIが準備できていない場合に開発に役立ちます。 –

    +1

    ありがとうございます!私たちが住んでいるこの年齢のありがとう! – cBlaine

    0

    ありがとうございます。あなたのブラウザやPostmanと連携していると言っているので、両方のリクエストを比較することができます。

    +0

    ご返信ありがとうございます。誰もいなかったので、[ネットワーク]タブで関連するリクエストが表示されませんでした。私の答えで説明したように、InMemoryWebApiModuleによって傍受されました。 –

    1

    私は同様の問題を抱えていましたが、いくつかの欲求不満の研究の後、私はthisの404エラーを解決しました。輸入の順序は重要です。
    誰かを助けることを願っています。

    関連する問題