如何使用代理设置部署Angular应用程序

如何使用代理设置部署Angular应用程序,angular,Angular,我有一个代理配置文件,它有一个指向目标的API(web服务)链接,用于调用我们的数据库。使用npm start,此代理配置在本地运行良好 现在我需要将此应用部署到IIS上的windows生产服务器。 我使用了ng build和ng build--prod看起来这不是使用代理设置生成构建。 我需要有关如何使用代理设置生成生成以便将其部署到prod server的帮助 Api部署在其他域上,此angular应用程序将部署在其他域上 谢谢代理配置文件用于本地开发web服务器。使用它的主要原因是,在本地

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

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

Api部署在其他域上,此angular应用程序将部署在其他域上


谢谢

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

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

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

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"
  }
};
export const environment = {
  production: true,
  backend: {
    baseURL:"http://example.com/api"
  }
};
服务中使用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();
        });
    });
  }
发展网址:

http://localhost:4200/yourapp
正在运行的服务将启用CORS并将API调用发送到

http://localhost:3000/api/v1
用于部署到生产中 为生产生成的命令

$ng build --prod --base-href=/yourapp/
该服务将从prod环境配置中获取baseURL

环境/environment.prod.ts

export const environment = {
  production: false,
  backend: {
    baseURL:"http://localhost:3000/api"
  }
};
export const environment = {
  production: true,
  backend: {
    baseURL:"http://example.com/api"
  }
};
因此,通过使用不同的环境,您可以配置不同的api URL。 请记住在生产web服务器中启用CORS,默认情况下,浏览器不允许连接到为Angular应用提供服务的域以外的域。

选项1:不要使用IIS服务器。 您可以使用node和express创建一个应用程序,为您的静态文件提供服务,并成为api服务器,它将调用正确的应用程序(几乎像重定向)

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

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


选项2:使用IIS和节点/快速应用程序##标题##


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

据我所知,不确定这是否可行!我们在一个网站上发布了API和webapp来避免这种情况!你打算在哪里部署这个?云?Windows服务器?将要部署在Windows服务器上好的,IIS服务器?嗨@daniel mora我有个问题要问你。如果您还需要部署到其他环境(如RC、QA、测试等),该怎么办?如果每个环境都有多个,例如10个QA环境,会怎么样?