将生成标头方法添加到路由创建方法[关闭]
Posted
技术标签:
【中文标题】将生成标头方法添加到路由创建方法[关闭]【英文标题】:Add generating headers method to route creating method [closed] 【发布时间】:2022-01-04 15:09:21 【问题描述】:我需要关于如何使我的代码更好的建议。 我有一个简单的类,它从使用 jwt 令牌身份验证的后端获取数据。
export class RepositoryService
constructor(private http: HttpClient, private envUrl: EnvironmentUrlService)
public getData = (route: string) =>
return this.http.get(this.createCompleteRoute(route, this.envUrl.urlAddress), this.generateHeaders());
private createCompleteRoute = (route: string, envAddress: string) =>
return `$envAddress/$route`;
private generateHeaders = () =>
return
headers: new HttpHeaders(
"Content-Type": "application/json",
"Authorization": `Bearer $localStorage.getItem("token")`
),
;
;
它工作得很好,但是当我得到更多的 http 方法时问题就开始了。如何更改 createCompleteRoute 以便不必在每个 http 方法中使用 generateHeaders()? 我想做一些类似的事情:
private createCompleteRoute = (route: string, envAddress: string) =>
return `$envAddress/$route`, this.generateHeaders();
http 方法可能如下所示:
public getData = (route: string) =>
return this.http.get(this.createCompleteRoute(route, this.envUrl.urlAddress));
但是不知道如何编写一个有效的函数。
【问题讨论】:
【参考方案1】:按照您的要求,最好的方法是将您创建标头的逻辑带到 拦截器,这将自动将标头参数添加到每个 http 调用。
可能是这样的:
您的拦截器文件(有点像服务,但必须实现 HttpInterceptor:
import Injectable from '@angular/core';
import
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor,
from '@angular/common/http';
// The service/way you use to get your token
import AuthService from '../services/auth.service';
@Injectable()
export class MyInterceptor implements HttpInterceptor
constructor(private authService: AuthService)
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>>
const url="\yourAPI\endpoint";
// Get your token
cont myToken = this.authService.getToken(); // or localStorage.getItem("token") or whatever your way to get your token
// Add authorization header with token if available
if (myToken)
request = request.clone(
setHeaders:
Authorization: `Bearer $currentUser.user.api_token`,
'Content-Type': 'application/json',
,
url,
);
...
EXTRA:有关如何添加和更新标头以及如何使用拦截器拦截请求和响应的更多信息:
Adding & Updating Headers
Intercepting request & responses
【讨论】:
以上是关于将生成标头方法添加到路由创建方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
csharp 使用方法覆盖标头将流量路由到控制器操作的方法。