2

春に書かれた残りのWebサービスに小さなAngularアプリを接続しようとしています。Tomcat サーバーは localhost:8080 で実行されており、grunt サーバーは localhost:11000 で実行されています。これにより、コンソールで CORS エラーが発生し、ブラウザから残りの API にリクエストを送信できません。

オンラインで見つけることができるほとんどの投稿に午前中ずっと費やしましたが、まだこれを機能させることができません。gruntサーバーが書き込んでいるcmdウィンドウにコンソールログが表示されますが、何を試してもCORSエラーが発生し続けます。

  connect: {
            livereload: {
                options: {
                  port: 11000,
                  hostname: 'localhost',
                  open: false,                                     
                  middleware: function(connect, options, middlewares) {                       
                        middlewares.unshift(function(req, res, next) {
                            console.log('***** ADDING HEADERS *****');
                            res.setHeader('Access-Control-Allow-Origin', '*');
                            res.setHeader('Access-Control-Allow-Credentials', true);
                            res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                            res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
                            next();
                        });

                        return middlewares;
                    }                                    
               }        
            } 
        } 

この問題を回避する方法を教えてくれる人はいますか?

4

1 に答える 1

1

わかりましたので、上記の grunt 構成が実際に機能しているようです。これを機能させるには、春にいくつかの修正を加える必要がありました。

通常、バックエンド API へのリクエストは Java から送信され、フロントエンド アプリも Java で記述され、リクエストはブラウザ >> tomcat\spring\java から送信され、このアプリが必要な場合は、これまでこれを行う必要はありませんでした。バックエンドへの残りの呼び出しを行うには、これらの問題を引き起こさない Java から開始します。

とにかく、Spring で記述された REST API を別のコンテナーで実行されている角度のあるアプリから直接呼び出そうとすると、この問題が発生する可能性がある人のための修正の例を次に示します。

構成クラスで次を構成します。

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/calculator/*").allowedOrigins("http://localhost:11000");
        }
    };
}

これは開発専用であり、おそらく http プロキシを使用してこれを非常に簡単に修正できたので、Apache Web サーバーにデプロイする必要はありません。これを行うと、セレン テストを実行すると、grunt サーバーを起動してangular app をそれに追加しても、自動ビルド プロセス中にすべての統合テストを実行できます。

于 2016-04-07T10:55:12.403 に答える