Angular 5 HttpClient:如何通过正则表达式过滤URL配置拦截器
实现建议:通过正则过滤URL来添加指定请求头
很简单,你只需要在拦截器里加入URL匹配逻辑,只有当请求URL符合你的正则规则时,才添加version请求头。这里我还帮你简化了正则表达式,让它更简洁易维护:
@Injectable() export class MyInterceptor implements HttpInterceptor { // 简化后的正则:匹配以/api/或api/开头的monitoring或guiTrackers路径 private readonly targetUrlRegex = /^\/?api\/(monitoring|guiTrackers)/; constructor() { } intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { // 检查当前请求URL是否匹配规则 if (this.targetUrlRegex.test(req.url)) { // 匹配则克隆请求并添加header const tokenInHeader = req.clone({ setHeaders: { 'version': '1LF' } }); return next.handle(tokenInHeader); } else { // 不匹配则直接传递原请求 return next.handle(req); } } }
关键细节说明:
- 正则简化:原来的
^api/monitoring|^api/guiTrackers|^/api/monitoring|^/api/guiTrackers可以合并为^\/?api\/(monitoring|guiTrackers),其中\/?表示可选的斜杠,(monitoring|guiTrackers)表示二选一,这样既覆盖了所有原规则,又更简洁。 - HttpRequest不可变性:Angular的
HttpRequest是不可变对象,所以必须通过clone()方法来修改请求头,不能直接修改原对象。 - URL匹配逻辑:使用正则的
test()方法检查请求的req.url,如果返回true就添加header,否则直接放行原请求。
这样修改后,就只会给符合规则的请求添加version请求头,其他请求不受影响啦。
内容的提问来源于stack exchange,提问作者firasKoubaa
相关产品推荐
相关产品推荐

