gpt4 book ai didi

angular - 使用相对 URL 时如何使用 HTTP 传输状态

转载 作者:行者123 更新时间:2023-12-01 10:20:02 28 4
gpt4 key购买 nike

我正在尝试实现内置 TransferHttpCacheModule为了删除重复的请求。我在我的应用程序中使用这个拦截器:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authService = this.injector.get(AuthenticationService);
const url = `${this.request ? this.request.protocol + '://' + this.request.get('host') : ''}${environment.baseBackendUrl}${req.url}`

let headers = new HttpHeaders();

if (this.request) {
// Server side: forward the cookies
const cookies = this.request.cookies;
const cookiesArray = [];
for (const name in cookies) {
if (cookies.hasOwnProperty(name)) {
cookiesArray.push(`${name}=${cookies[name]}`);
}
}
headers = headers.append('Cookie', cookiesArray.join('; '));
}

headers = headers.append('Content-Type', 'application/json');

const finalReq: HttpRequest<any> = req.clone({ url, headers });
...

它为客户端启用相对 URL,为服务器端启用完整 URL,因为服务器不知道自己的 URL。

问题在于 TransferHttpCacheModule 使用基于方法、URL 和参数的键,并且服务器 URL 与客户端 URL 不匹配。

有没有办法强制 TransferHttpCacheInterceptor 在我自己的拦截器之前执行?我想避免在客户端强制使用完整的 URL。

最佳答案

您可以将拦截器放在它自己的模块中:

@NgModule({
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: MyOwnInterceptor, multi: true }
]
})
export class MyOwnInterceptorModule {}

然后您可以将此模块放在 AppModule 中 TransferHttpCacheModule 的导入下方:

@NgModule({
imports: [
// ...
TransferHttpCacheModule,
MyOwnInterceptorModule
],
// ...
})
export class AppModule {}

这样您的拦截器将在 TransferHttpCacheInterceptor 之后应用。不过感觉很奇怪,因为据我所知,首先是导入,然后是提供者。这样您就可以覆盖导入的提供程序。您确定不想反过来吗?

关于angular - 使用相对 URL 时如何使用 HTTP 传输状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53352294/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com