Angular 2 CLI 中基于环境的不同代理配置
Different proxy config based on environment in Angular 2 CLI
如何在 Angular 2 CLI 项目中为开发和生产环境声明 2 个不同的代理 URL?例如,在开发模式下,我想使用
{
"/api/*": {
"target": "http://localhost:3000",
"secure": false
}
}
但在生产模式下,我会使用
{
"/api/*": {
"target": "http://api.exampledomain.com",
"secure": false
}
}
我不相信你可以通过环境文件来控制代理功能。另一种方法是在环境文件
中定义 api 域
// environment.ts
export const environment = {
production: false,
api: 'http://localhost:3000'
};
// environment.prod.ts
export const environment = {
production: true,
api: 'http://api.exampledomain.com'
}
然后在你的 ts 源文件中从环境文件中提取域
// some service
import { Injectable } from '@angular/core';
import { environment } from '../../../environment.ts';
import { Http } from '@angular/http';
@Injectable()
export class SomeService {
constructor(private http: Http);
getData(){
return this.http.get(environment.api + '/rest-of-api');
}
}
现在,当您 运行 构建或提供命令时,它们将使用环境文件
中定义的 api 路径
其实是可以的,你只需要配置路由器即可:
{
"/api": {
"target": "https://api.exampledomain.com",
"secure": false,
"logLevel": "debug",
"router": {
"localhost:4200" : "http://localhost:3000/exampledomain",
"staging.exampledomain.com" : "http://api.staging.exampledomain.com"
}
}
}
这是做什么的:
- yout url 匹配代理 => 将调用定义的目标
- 主机url匹配一个路由器配置=>使用新目标
例如:
我已经在 localhost:4200 上部署了我的 angular 应用程序,当调用 url "api/callMeMaybe" 时,路由器会检测到它并重定向到“http://localhost:3000/exampledomain”。
如果我一直在 staging.exampledomain.com,那么重定向将是“http://api.stagging.exampledomain.com”。
然后,如果 none 匹配,它保持原来的目标重定向。
小心,因为顺序很重要(第一场比赛将进行)
这是documentation with an example
编辑
您可以在 chrome 调试器网络选项卡上找到主机值并选择 api 调用,您会得到以下详细信息:
如何在 Angular 2 CLI 项目中为开发和生产环境声明 2 个不同的代理 URL?例如,在开发模式下,我想使用
{
"/api/*": {
"target": "http://localhost:3000",
"secure": false
}
}
但在生产模式下,我会使用
{
"/api/*": {
"target": "http://api.exampledomain.com",
"secure": false
}
}
我不相信你可以通过环境文件来控制代理功能。另一种方法是在环境文件
中定义 api 域// environment.ts
export const environment = {
production: false,
api: 'http://localhost:3000'
};
// environment.prod.ts
export const environment = {
production: true,
api: 'http://api.exampledomain.com'
}
然后在你的 ts 源文件中从环境文件中提取域
// some service
import { Injectable } from '@angular/core';
import { environment } from '../../../environment.ts';
import { Http } from '@angular/http';
@Injectable()
export class SomeService {
constructor(private http: Http);
getData(){
return this.http.get(environment.api + '/rest-of-api');
}
}
现在,当您 运行 构建或提供命令时,它们将使用环境文件
中定义的 api 路径其实是可以的,你只需要配置路由器即可:
{
"/api": {
"target": "https://api.exampledomain.com",
"secure": false,
"logLevel": "debug",
"router": {
"localhost:4200" : "http://localhost:3000/exampledomain",
"staging.exampledomain.com" : "http://api.staging.exampledomain.com"
}
}
}
这是做什么的:
- yout url 匹配代理 => 将调用定义的目标
- 主机url匹配一个路由器配置=>使用新目标
例如:
我已经在 localhost:4200 上部署了我的 angular 应用程序,当调用 url "api/callMeMaybe" 时,路由器会检测到它并重定向到“http://localhost:3000/exampledomain”。
如果我一直在 staging.exampledomain.com,那么重定向将是“http://api.stagging.exampledomain.com”。
然后,如果 none 匹配,它保持原来的目标重定向。
小心,因为顺序很重要(第一场比赛将进行)
这是documentation with an example
编辑
您可以在 chrome 调试器网络选项卡上找到主机值并选择 api 调用,您会得到以下详细信息: