如何在不对URL进行硬编码的情况下向API服务器发出请求?

时间:2016-09-10 01:18:15

标签: http angular

我正在尝试使用angular 2实现应用,并且需要向我的API服务器发出请求。但是,我认为在每个请求中对完整URL进行硬编码是一个坏主意,因为它很可能会发生变化。我看了看这篇文章: Set base url for angular 2 http requests

但适用于测试版。我正在使用RC6而无法使其工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果在提供客户端代码的同一服务器上运行json后端,则无需在url中指定端口。对于其他url settins(就像我在/ api /下的所有服务)我使用一个单独的帮助类来处理所有配置等等,这个有/ api / hardcoded,但它只在那个地方。可以手动或在构建过程中轻松更改。

班级可以是这样的:

erb

答案 1 :(得分:0)

如果您使用Gulp等构建工具构建角度应用程序,则可以在构建时控制应用程序的基本URL。它不允许您在运行时切换基本URL,但它允许您使用单个命令构建指向本地计算机或服务器的应用程序。

gulpfile.js:

var gulpUtil = require('gulp-util');
var gulpData = require('gulp-data');
var gulpTemplate = require('gulp-template');

var sourceDir = 'path/to/src';
var buildDir = 'path/to/build/target';

gulp.task('default', [],
        function() {
            return gulp.src(sourceDir + 'index.html')
                .pipe(gulpData(function() {
                        return {
                            baseUrl : gulpUtil.env.baseUrl
                        };
                    }))
                .pipe(gulpTemplate())
                .pipe(gulp.dest(buildDir));
        });

然后在index.html中:

<script>
    angular.module('myApp', [])
    .provider('appConfigProvider', function () {
      return {
        $get: function () {
          return {
              baseUrl: '<%= baseUrl %>'
          };
        }
      };
    });
</script> 

然后当你运行gulp时,提供baseUrl作为命令行参数:

gulp --baseUrl https://my.server.com

这设置了gulpUtil.env中可用的环境变量;您也可以通过道具文件和gulp-props提供配置(虽然我还没有使用它)。通过单个命令配置角度应用程序是Gulp等任务管理员最喜欢的用途之一。

祝你好运!