具有REST服务的Angular来源同时适用于Web应用程序和电子版

时间:2019-03-03 11:22:01

标签: angular electron

我们考虑过将现有的Angluar Web应用打包到一个电子项目中,以使其离线运行。 到目前为止,该Web应用程序通过REST请求加载配置。在电子应用程序中,此信息应位于本地文件中。

任何建议如何有效地做到这一点?

我的第一个想法,是在电子中的 express 服务器中嘲笑后端似乎并不常见。 但是对我来说,以角度重定向所有REST请求似乎也不是很明智。

1 个答案:

答案 0 :(得分:0)

所以我要做的是创建一个Http扩展类,并根据您通过http请求发送的参数更新端点。

Http Extender:

export function HttpAuthCreator(http: HttpClient) {
return new HttpAuth(http)
}

@Injectable()
export class HttpAuth {
// Extending the HttpClient through the Angular DI.
public constructor(public http: HttpClient) {
// If you don't want to use the extended versions in some cases you can access 
the public property and use the original one.
// for ex. this.httpClient.http.get(...)
}

/**
 * GET request
 * @param string endPoint it doesn't need / in front of the end point
 * @param IRequestOptions options options of the request like headers, body, etc.
 * @returns Observable<T>
*/
public get<T>(endPoint: string, destination?: string, options?: IRequestOptions): Observable<T> {
return this.http.get<T>(
  this.updateEndpoint(endPoint, destination),
  this.configRequestOptions(options, destination)
)
}

然后您的子例程来更新端点

private updateEndpoint(endpoint: string, destination?: string) {
if (destination === 'local') {
  return `${environment.localAPI}${endpoint}`
} else {
  return `${environment.onlineAPI}${endpoint}`
}
}

这样,您可以动态处理端点位置

  get() {
return this.http.get(`/organizations/${params.id}`, 'local').toPromise()
}