2016-06-16 12 views
0

私は、RESTサービスを使用するAngularJSシングルページアプリケーションで作業しています。フロントエンドアプリケーションはバックエンドとは別に開発されているため、開発中にAJAX呼び出しのURLにドメイン名をハードコードする必要があります(CORSを有効にしています)。しかし、制作の場合、すべてが同じドメインで実行されているため、ドメイン名をハードコーディングするのは少し悪く見えます。開発中にajax呼び出し用のURLにドメイン名を使用できますか?本番環境ではドメイン名をハードコードしませんか?私はギャルプを使用しています。angularjsで開発と生産に異なるドメインを使用する

+1

私は[gulp-ng-constant](https://github.com/guzart/gulp-ng-constant)をいくつかの機会に使っています。次に、 "API URL"(gulp-ng-constantで設定されている)を前に置く '$ http' [インターセプタ](https://docs.angularjs.org/api/ng/service/$http#interceptors)を実装します。 HTTPコールに送信します。 –

+0

それは私にとって素晴らしいアイデアのように思えます。私はそれを試みます。 – VJAI

+0

あなたが回答として投稿した場合、私はupvoteまたは回答として受け入れることができます。 – VJAI

答えて

1

$httpgulp-ng-constantの使用例:あなたのサービスがbaseUrlを取得するために使用アプリケーション内の定数:gulpfile.js

次のタスクの内容angular.module('globals', []).constant('apiContextPath', '...');でファイルtarget/build/scripts/_config.jsを生成します。もちろん、あなたの(縮小さ/パック)で生成されたファイルをインクルードする必要があり

gulp.task('app.ngconstant', [], function() { 
    var ngConstant = require('gulp-ng-constant'), 
    var rename = require('gulp-rename'); 

    return 
     ngConstant({ 
      constants: { 
       apiContextPath: '.' // TODO Devise a way to set per environment; eg command line 
      }, 
      name: 'globals', 
      stream: true 
     }) 
     .pipe(rename('_config.js')) 
     .pipe(gulp.dest('target/build/scripts')); 
}); 

コード。次のコードに沿って

何かが'/api/'で始まるすべてのリクエスト(つまり、私たちのRESTエンドポイント)へapiContextPathを付加する$httpProviderを設定します:

angular.module(...).config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(['globals', function(globals) { 
     return { 
      'request': function(config) { 
       if(config.url.indexOf('/api/') === 0) { 
        config.url = globals.apiContextPath + config.url; 
       } 
       return config; 
      } 
     }; 
    }]); 
}]); 

(かなりの数の他の設定オプションがありますので、この

0

まだ作成していない場合は、gulpビルドにパラメータを渡して、本番モードまたは開発モードでビルドすることができます。そして、あなたが持っている可能性が

'window.baseUrl = ' + baseUrl 

:あなたの角度スクリプトのすべての前に構築し、あなたのjavascriptに(gulp-insertを使用して)スクリプトを含めるために使用されているあなたのgulpfileでbaseUrlプロパティを設定することができ、そのフラグに基づいて

angular.module('YourModule').constant('baseUrl', window.baseUrl); 
+0

この場合、開発中にCSS /画像も別のドメインから取得しますか?私はcss/imagesをローカルマシンからロードするだけで、AJAX呼び出しは異なるドメインにヒットする必要があります。 – VJAI

+0

あなたのアプリケーションでどこでも 'baseUrl'を使うことができます。あなたが望む場合を除き、イメージの読み込みには影響しません。あなたのサービスでは、それを挿入して、 '$ http.get(baseUrl + '/ api/endpoint')のようなURLを構築することができます。 – DerekMT12

+0

そこに問題があります。現在、たくさんのファイルに大量のURLがあり、それぞれを移動してbaseurlを前に変えるのはかなり難しいです。 – VJAI

関連する問題