明月映雪 發表於 2020-4-29 14:40:00

angular http请求封装(带token)

<p>1,创建一个ts文件;</p>
<p><img src="https://img2020.cnblogs.com/blog/1159910/202004/1159910-20200429143319365-1339322547.png"></p>
<p>2,base-interceptor.ts;写入代码:</p>
<div>
<div>import&nbsp;{&nbsp;Injectable&nbsp;}&nbsp;from&nbsp;'@angular/core';</div>
<div>import&nbsp;{&nbsp;Router,ActivatedRoute&nbsp;}&nbsp;from&nbsp;'@angular/router';</div>
<div>import&nbsp;{</div>
<div>&nbsp;&nbsp;HttpEvent,&nbsp;HttpInterceptor,&nbsp;HttpHandler,&nbsp;HttpRequest,&nbsp;HttpErrorResponse</div>
<div>}&nbsp;from&nbsp;"@angular/common/http";</div>
<div>import&nbsp;{&nbsp;PublicService&nbsp;}&nbsp;from&nbsp;"../public/public.service";</div>
<div>import&nbsp;{&nbsp;throwError&nbsp;}&nbsp;from&nbsp;'rxjs';</div>
<div>import&nbsp;{&nbsp;catchError,&nbsp;retry&nbsp;}&nbsp;from&nbsp;"rxjs/operators";</div>
<div>import&nbsp;*&nbsp;as&nbsp;Cookies&nbsp;from&nbsp;'js-cookie';</div>
<div>
<div>@Injectable()</div>
<div>export&nbsp;class&nbsp;BaseInterceptor&nbsp;implements&nbsp;HttpInterceptor&nbsp;{</div>
<div>&nbsp;&nbsp;public&nbsp;erors;</div>
<div>&nbsp;&nbsp;constructor(public&nbsp;router:&nbsp;Router,&nbsp;public&nbsp;url:&nbsp;PublicService)&nbsp;{}</div>
<div>&nbsp;&nbsp;intercept(req,&nbsp;next:&nbsp;HttpHandler)&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;hadBaseurl&nbsp;=&nbsp;Boolean(req.headers.get('hadBaseurl'))&nbsp;||&nbsp;false;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;newReq&nbsp;=&nbsp;req.clone({</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;hadBaseurl&nbsp;?&nbsp;`${req.url}`&nbsp;:&nbsp;`${baseurl}${req.url}`,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;});</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;Cookie&nbsp;=&nbsp;Cookies.get('manageAuthorizationData');</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!req.cancelToken)&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newReq.headers&nbsp;=</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newReq.headers.set('Authorization',&nbsp;'Bearer&nbsp;'+Cookie);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;next.handle(newReq)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.pipe(</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retry(2),</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catchError(this.handleError)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</div>
<div>&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;private&nbsp;handleError(error:&nbsp;HttpErrorResponse)&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(error.error&nbsp;instanceof&nbsp;ErrorEvent)&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.error('An&nbsp;error&nbsp;occurred:',&nbsp;error.error.message);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*console.log(error);*/</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.erors&nbsp;=&nbsp;error;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.erors.error.Message&nbsp;==&nbsp;'已拒绝为此请求授权。')&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localStorage.setItem('quan',&nbsp;'true');</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.location.href&nbsp;=&nbsp;'#/Login';</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.error(</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`Backend&nbsp;returned&nbsp;code&nbsp;${error.status},&nbsp;`&nbsp;+</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`body&nbsp;was:&nbsp;${error.error}`);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;return&nbsp;an&nbsp;observable&nbsp;with&nbsp;a&nbsp;user-facing&nbsp;error&nbsp;message</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;throwError(</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Something&nbsp;bad&nbsp;happened;&nbsp;please&nbsp;try&nbsp;again&nbsp;later.');</div>
<div>&nbsp;&nbsp;};</div>
<div>}</div>
<div>3,index.ts中引入base-interceptor.ts;</div>
<div>
<div>
<div>import&nbsp;{&nbsp;HTTP_INTERCEPTORS&nbsp;}&nbsp;from&nbsp;'@angular/common/http';</div>
<br>
<div>import&nbsp;{&nbsp;BaseInterceptor&nbsp;}&nbsp;from&nbsp;'./base-interceptor';</div>

<br>
<div>/**&nbsp;Http&nbsp;interceptor&nbsp;providers&nbsp;in&nbsp;outside-in&nbsp;order&nbsp;*/</div>
<div>export&nbsp;const&nbsp;httpInterceptorProviders&nbsp;=&nbsp;[</div>
<div>&nbsp;&nbsp;{&nbsp;provide:&nbsp;HTTP_INTERCEPTORS,&nbsp;useClass:&nbsp;BaseInterceptor,&nbsp;multi:&nbsp;true&nbsp;},</div>

<br>
<div>];</div>

</div>
</div>
</div>
</div>
<p>2,在app.module.ts引入,都可以用了;</p>
<p><img src="https://img2020.cnblogs.com/blog/1159910/202004/1159910-20200429143501415-114769792.png"></p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1159910/202004/1159910-20200429143534990-204950889.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xianc/p/12802091.html
頁: [1]
查看完整版本: angular http请求封装(带token)