HttpClient Angular 5 不发送请求

Posted

技术标签:

【中文标题】HttpClient Angular 5 不发送请求【英文标题】:HttpClient Angular 5 does not send request 【发布时间】:2018-02-08 17:14:25 【问题描述】:

我在 Angular 5 中遇到了 HttpClient 的问题。HttpClient 没有在两个指定的组件上发送任何请求(我在控制台中看不到任何 xhr 登录)。在其他组件上,一切都很好。

从组件 A 调用 ApiService POST 方法(像 HttpClient 的包装器一样工作的自定义服务),但是当我从组件 B 调用此方法时 HttpClient 似乎被冻结了。

我的应用中有很多使用 ApiService 的组件。一切都很好。我不知道出了什么问题。

---回应

ApiService.ts

@Injectable()
export class ApiService

    private errorListeners : Map<string, Array<(details ?: any) => any>> =
        new Map<string, Array<(details ?: any) => any>>();

    public constructor(private http: HttpClient)
    

    

    public post<T>(path : string, data : any, urlParams : any = null) : Observable<any>
    
        return this.http.post<T>(`$environment.api.path$path`, data, 
            params: urlParams
        ).catch(this.catchErrors()).map(response => 
            if (response['Error'])
                throw response['Error'];
            

            return response;
        );
    


-- 组件

   @Component(
    selector: 'login-register-component',
    templateUrl: './register.component.html',
    styleUrls: [
        './../../assets/main/css/pages/login.css'
    ]
)
export class RegisterComponent implements OnInit, OnDestroy


public constructor(private route: ActivatedRoute,
                       private router: Router,
                       private userService : UserService,
                       private apiService: ApiService
    )
    
        this.apiService.post('/some-endpoint', null, ).subscribe(res => 
console.log(res);

);


即使我直接将 HttpClient 注入到组件中,HttpClient 也不起作用

-- 同一模块中的其他组件 示例调用:(有效)

public loginTraditionalMethod(emailAddress : string, plainPassword : string)
    

        this.apiService.post('/auth/email', 
            email: emailAddress,
            password: plainPassword
        , ).subscribe(res => 
           console.log(res);
        )

    

【问题讨论】:

了解一些方法:服务中的 http 调用,以及如何在组件中调用服务 @David 我编辑了帖子 其他组件中如何调用service?您可以发布组件 A 和 B 的调用吗? @David 我添加了一个调用服务方法的代码示例 我滑倒了。在组件而不是调用 subscribe() 中,我使用了 map()。我在上面的帖子中的示例代码也犯了错误,我没有复制代码,我重写了它,过了一会儿我发现我在原始代码中犯了错误。所以上面的代码是正确的,并且似乎可以正常工作。很抱歉给您带来麻烦,但感谢您的帮助。我花了 3 个小时才看到这个愚蠢的小姐 【参考方案1】:

我遇到了同样的问题,订阅http.get() 后没有 xhr 请求。这是一个忘记密码功能的请求,因此我没有连接到应用程序。

请求被一个 http 令牌拦截器拦截,如果没有检测到会话,该拦截器返回一个空的 Observable。

不知道,这可能对某人有帮助...

【讨论】:

谢谢好心的陌生人!这正是我所需要的! 这个“http 令牌拦截器”在哪里?在应用程序中,还是在 API 服务器上?可以发一些代码吗? 令牌拦截器是客户端,看起来像这样:medium.com/@ryanchenkie_40935/… 如果我们没有通过身份验证,以下代码会阻止任何请求被分派:if (!this.session.isAuthenticated() &amp;&amp; !this.session.isFetching()) this.session.dispatchSessionLost(); return Observable.empty();

以上是关于HttpClient Angular 5 不发送请求的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5 HTTPClient 基本授权不起作用

Safari 未能使用 Angular 的 HttpClient 发送有效的 GET 请求

Angular HttpClient 阻塞授权标头

Angular HttpClient 的发布请求未向服务器发送正确的数据

Express 服务器无法接收 Angular HttpClient 发送的身份验证标头

Angular HttpClient 简单的 GET 发送预检选项。如何强制我的 GET 保持简单请求?