配置Angular 2 HTTP服务

时间:2016-12-02 16:25:28

标签: javascript angular angular2-http

我想知道使用http服务的正确方法是什么。例如,我对服务器的所有请求都以/Api开头。 我应该每次都写this.http.get('/Api/SomeRoute/:id'),还是更优雅的方式来省略Api

或者我应该创建一些使用managerService的其他http

2 个答案:

答案 0 :(得分:3)

端点url 之类的东西可能是一般配置文件的一个很好的例子。

在我的角度2应用程序中,我使用依赖注入。在这种情况下,我使用OpaqueToken使用 app.config.ts 来使其可注射:

import { OpaqueToken } from '@angular/core';

export interface IAppConfig {
    appTitle: string;
    endpointUrl: string;
};

export const CONFIG: IAppConfig = {
    appTitle: 'MyApp',
    endpointUrl: 'http://api.myrealservice.com/'
};

export const LOCALCONFIG: IAppConfig = {
    appTitle: 'MyApp (LOCAL)',
    endpointUrl: 'http://localhost:8080/api/'
};

export let APP_CONFIG = new OpaqueToken('app.config');

通过这种方式,您可以拥有多个配置(例如,用于本地开发或生产等),并将其定义为模块中的提供程序,如下所示:

providers: [
    ...,
    {
        provide: APP_CONFIG,
        useValue: CONFIG
    },
    ...
]

然后我只是在我需要的地方注入此配置,例如在后端服务中使用 endpointUrl

...
constructor(@Inject(APP_CONFIG) private _config:Config) {
    console.log(this._config.endpointUrl);
}

在您的模块中,您只需更改要提供的配置类型(例如,在此示例中为CONFIGLOCALCONFIG),而不必在其他任何位置更改它。

希望这有帮助。

编辑完成后,您添加了第二个问题或者我应该创建一些其他将使用http的服务器吗?

简短回答:是的。您应该尽可能地分离组件,服务等的逻辑。

假设您有一个提供猫狗信息的API。你想要在你的前端拥有的可能是CatServiceDogServiceBackendServiceApiService,无论你想要什么。

CatServiceDogService是您的视图组件将与之交互的组件,例如,它们将具有getCatById()之类的方法或类似的方法。这些服务很可能与anohter服务互动,BackendService会注入Http并使用post()get()等常规方法。

因此,您的BackendService是必须知道特定网址,处理响应或错误并使用结果向调用服务报告的人,而其他人将仅用作管道和句柄具体的商业逻辑。

答案 1 :(得分:0)

你是对的,最好在变量中加入重复值。您可以将基本网址放在const

const apiUrl = '/Api/';

然后如果网址发生了变化,您只能在一个地方进行更改,而且您的代码看起来更干净。用法是这样的:

this.http.get(apiUrl + 'SomeRoute/:id')

当然你也可以创建一个为你做这个的功能,但这可能是太过抽象。