【问题标题】:How to Deploy Angular app with Proxy Settings如何使用代理设置部署 Angular 应用程序
【发布时间】:2019-05-04 09:17:49
【问题描述】:

我有一个代理配置文件,其中包含指向目标的 API(Web 服务)链接以调用我们的数据库。此代理配置在本地使用 npm start 运行良好。

现在我需要将此应用程序部署到 IIS 上的生产 Windows 服务器。 我使用了 ng build 和 ng build --prod 看起来这不是使用代理设置生成构建。 我需要有关如何使用代理设置生成构建以便将其部署到产品服务器的帮助。

Api 部署在其他域上,而这个 Angular 应用程序将部署在其他域上。

谢谢

【问题讨论】:

  • 据我所知,不确定是否可能!为了避免这种情况,我们已将 API 和 webapp 发布在一个站点中!
  • 你打算在哪里部署它?云? Windows 服务器?
  • 要部署在windows服务器上
  • 好的,IIS 服务器?

标签: angular


【解决方案1】:

选项 1:不要使用 IIS 服务器。

您可以使用 node 和 express 创建一个应用程序来服务您的静态文件并成为您的 api 服务器,它将调用正确的服务器(几乎就像重定向)

ng serve --proxy-config 可能做的是运行一个节点服务器,将您的应用程序公开为静态,并根据您的配置重定向(调用服务器)到服务器运行 api。

当我们从节点服务器调用 api 时,没有 CORS,因为我们没有像 Web 应用程序那样的主机名。


选项 2:使用 IIS 和 node/express 应用程序## Heading ##

您可以创建一个应用程序并允许 CORS 访问您的主机名。从这个应用程序中,您可以公开一个通用 api 并调用正确的 api 服务器。

【讨论】:

    【解决方案2】:

    将 Angular 8 应用程序部署到生产环境

    您可以使用环境功能,例如:

    用于发展

    proxy.conf.json

    {
      "/api": {
          "target": "http://localhost:3000/api",
          "secure": false,
          "pathRewrite": {"^/api" : ""}
        }
    }
    

    您在 environments/environment.ts

    中设置后端 baseURL
    export const environment = {
      production: false,
      backend: {
        baseURL:"http://localhost:3000/api"
      }
    };
    

    在 service 中使用 baseURL:

      baseUrl: string = environment.backend.baseURL;
    
      getAll(): Observable<UsersResponse> {
        return Observable.create(observer => {
         this.http.get<AccountsResponse>(`${this.baseUrl}` + '/users')
            .subscribe((result) => {
              const accountsResponse = result;
              observer.next(accountsResponse);
              observer.complete();
            });
        });
      }
    

    为了开发,使用实时发球:

    $ng serve --proxy-config proxy.conf.json  --host 0.0.0.0 --port 4200
    

    开发地址:

    http://localhost:4200/yourapp
    

    正在运行的服务将启用 CORS 并将 API 调用发送到

    http://localhost:3000/api/v1
    

    用于部署到生产

    为生产构建的命令:

    $ng build --prod --base-href=/yourapp/
    

    该服务将从 prod 环境配置中获取 baseURL:

    environments/environment.prod.ts

    export const environment = {
      production: true,
      backend: {
        baseURL:"http://example.com/api"
      }
    };
    

    所以,通过使用不同的环境,你可以配置不同的api url。 请记住在您的生产网络服务器中启用 CORS,默认情况下,浏览器不允许连接到与您的 Angular 应用程序不同的域。

    【讨论】:

    • 嗨@daniel-mora 我有一个问题要问你。如果您还需要部署到其他环境,如 RC、QA、Test 等,该怎么办?如果每个环境都有多个,例如 10 个 QA 环境怎么办?
    【解决方案3】:

    代理配置文件用于本地开发 Web 服务器。您使用它的主要原因是,您可以在本地机器上开发 Angular 应用和 api 时避免跨域请求,而不必在 api 中允许跨域请求。

    当您发布到生产环境时,不支持代理配置文件。您将发布到您的生产网络服务器。

    如果您的 api 托管在同一个域下,则不需要代理请求,因为它们不是跨域的,如果 api 在另一个域上,您将需要在 api 中允许跨域请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2017-10-11
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多