2016-04-05 9 views
0

Grailsを使用してバックエンドを構築している最中に、ExtJSで作成されたフロントエンドで実行されるアプリケーションを用意してください。TomcatでGrailsとSencha ExtJSを実行する

ExtJSアプリケーションは、Windowsコマンドラインから、sencha app build、次にsencha web startを使用して構築され、展開され、ポート80でアプリケーションを起動します。次に、GrailsアプリケーションはIntelliJ(Run->Run 'Application')を介して実行されますが、ポート8080で実行されます。

同じポートの下にあることに依存しているので、GrailsのサービスをExtJSアプリケーションからどのように呼び出すことができますか? 1つのTomcatインスタンスの下に仮想ホスト経由でアプリケーションを展開する方法はありますか?

+0

開発環境だけを求めていますか? – JChap

答えて

0

サーバー側とクライアント側の両方でCORSを有効にすると、ExtJSを他のポートに呼び出すことができます。

Grailsの

このpluginをインストールしてConfig.groovyに次の設定を追加することができますGrailsの側でCORSを有効にするには。基本的には、どのドメインでもこのアプリケーションにリクエストできることを伝えています。私たちは、単純にすべてのAJAX要求をbeforerequestリスナーを追加することができ、これを行うために、同様のExtJS側でCORSを有効にする必要があり

cors { 
    enabled = true 
    url.pattern = '*' 
    allow.origin.regex = '.*' 
    headers=[ 
     'Access-Control-Allow-Headers': 'origin, authorization, accept, cookie, set-cookie, content-type, x-requested-with', 
     'Access-Control-Allow-Methods': 'GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS', 
     'Access-Control-Max-Age': 3600 
    ] 
} 

ExtJSの

。また、私は自分のAPI Urlを設定できる共通の場所を持つことを好むので、プロキシのようなすべての場所でAPI URLを定義するのではなく、AJAXの要求を集中させることができます。

これは、アプリケーションの起動方法に次のコードを追加することで可能です。

var API_URL = 'http://localhost:8080/grailsappp' 
Ext.Ajax.on({ 
    beforerequest: function(conn, opts){   
     if(opts.url) { 
      opts.url = API_URL + opts.url; 
     } 
     conn.setCors(true); 
    } 
}); 
+0

ありがとう!私はこれで部分的な方法を持っている。これで、バックエンドサービスはExtJSを呼び出します。唯一の問題は、CORSの部分はまだ少し混乱しているということです。私はそれをGrails側に追加しました(私はv3.0を使用しています。2)上記のように、依然としてExtJSからのPOSTの代わりにOPTIONSとして依頼が送信されています。 – Syam

+0

CORSを有効にすると、2つの要求が送信されます。 1つはプリフライトリクエスト(OPTIONS)で、もう1つは実際のリクエスト(POST)です。 – JChap

0

node.js以外のバックエンドを使用している場合、Sencha Web Startコマンドは役に立たなくなります。

Webサーバーの場合、ExtJSはブラウザに配信され、ブラウザによって解釈されるため、静的ファイルにすぎません。私は特にtomcat/grailsについてはわかりませんが、すべてのWebサーバーは何とか静的ファイルを提供できるはずです。

たとえば、ASP.NETバックエンドを使用し、ASP.NETプロジェクトの作業ディレクトリにExtJSファイルを追加しました。だから私がデバッグしたいとき、私はVisualStudioからローカルにバックエンドのデバッグプロセスを開始し、バックエンドプロセスにアクセスできる静的なjavascriptファイルを読み込むことができます。私はSencha Web Startを使ったことはありません。なぜなら、あなたがnode.jsではないバックエンドを持っていれば、それは役に立たないからです。

tomcat/grailsについても同じ操作を行う必要があります。これを達成する方法は、ExtJSとは関係のない純粋なtomcat/grailsの質問です。

+0

残念ながら、NodeJSは、プロジェクトがバックエンド用のGrailsフレームワークを使用して開始されて以来、残念なことに私たちの選択肢ではありません。私たちのローカルマシンでデバッグするのは、私たちが問題を抱えている場所です。 ExtJSアプリケーションはGrailsアプリケーションバックエンドに接続しますが、ExtJSからのGrailsアプリケーションへの呼び出しは、Grailsアプリケーションが実行されているポートではなく、デフォルトのExtJSポートからの呼び出しです。 – Syam

+0

私の答えは少し広がりました。 – Alexander

関連する問題