3

前言

使用Ng-aialin有一段时间了,虽然有坑,但是还是自己掌握的不熟练,这个问题也困惑了我一段时间

问题分析

  1. 在使用前端框架不登录时发送http请求
  2. 请求不能发出
  3. 代码

service:

` public getAll(): Observable<Array<Website>> {
    return this.httpClient.get<Array<Website>>(`${this.baseUrl}`);
}`

ts:

`this.websiteService.getAll().subscribe(
        (res)=> {
            this.websiteList = res;
            console.log(res);
        },() => {
            this.msg.error('error');
            console.log('error');
        });`
        
一个非常简单的get请求获取全部的数据

问题

在控制台没有找不到该网络请求
image.png
同样控制台也会打印错误
image.png

很明显,前台在发送请求时,就没有发送出去(被拦下了),不然控制台不可能没有请求

原因

看了拦截器的代码,发现自己写的拦截器没有任何问题,问了张喜硕顺便查了一下资料。

发现:Ng-aialin 默认实现了拦截器,在发送http请求的时会默认添加token,如果没登录,没有token,它就会将你的请求拦下(它认为你只有登录才能发请求)参考文章

image.png

解决办法

在发送http 请求的时候带上_allow_anonymous 参数允许匿名登录,也就是不带token是也让它发送请求。
image.png
在控制台可以看到发送的请求,但是还有问题那就是报: 401
image.png

401 非常常见的状态码,没有权限,那解决也就非常简单了

解决401

由于后台配置了Spring Security会对后台的任何请求进行认证保护,在请求时没有登录,所以就会出现401的错误了

image.png

忽略对该请求的认证保护

请求成功

image.png

在此发送请求,状态码200,请求成功

总结

在ng-alain的文档中并没有说明,这也是我掉坑的原因,希望对其他人有所帮助。

潘佳琦
894 声望34 粉丝

为 API 生,为框架死,为 debug 奋斗一辈子;