【问题标题】:Http Interceptor Angular 4Http拦截器Angular 4
【发布时间】:2018-05-19 14:34:25
【问题描述】:

我在使用 Angular 4 框架的 Typescript 文件中遇到错误。 IntelliJ IDE 无法识别 HttpRequest 的任何数据类型。

代码如下:

import {Component, Injectable, OnInit} from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/of';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import {ActivatedRoute, Router} from "@angular/router";
import {
  HttpClient, HttpErrorResponse, HttpEvent, HttpHandler, HttpHeaders, HttpRequest,
  HttpResponse, HttpInterceptor, HttpEventType} from "@angular/common/http";
import * as $ from "jquery";

@Injectable()
export class Service {

public getNames() {

   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
       if (request.responseType == 'json') {
       request = request.clone({ responseType: 'text' });

       return next.handle(req).map(response => {
         if (response instanceof HttpResponse) {
         response = response.clone<any>({ body: JSON.parse(response.body) });
      }

      return response;
    });
  }
}

来自以下 GitHub 网站:https://github.com/angular/angular/issues/18396#issuecomment-349403045

我检查了我正在导入“@angular/common/http”,并且我的 Typescript 版本是最新的(我有 2.6.2 版)。

有谁知道如何解决这个问题? 任何建议将不胜感激。

谢谢。

【问题讨论】:

  • 如果你指出你遇到了什么错误会很有帮助
  • 我知道该数据类型在那里不被识别或允许。感谢您的回复。
  • 拦截器不应该在方法中。请阅读文档angular.io/guide/http#intercepting-all-requests-or-responses
  • 此修复有效...我已阅读文档但错过了该细节。谢谢你指出。但是,我在解析 JSON 时仍然遇到错误。将进一步研究这个问题。

标签: angular httpclient angular-http-interceptors


【解决方案1】:

使用拦截器的正确方法是这样的:

import {
  Injectable,
} from '@angular/core';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor
} from '@angular/common/http';
import {
  Observable
} from 'rxjs/Observable';

@Injectable()
export class MyInterceptor implements HttpInterceptor {
  constructor() {
  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (request.responseType == 'json') {
      request = request.clone({ responseType: 'text' });
    }

    return next.handle(request).map(// your code here)
  }
}

找出你的代码的不同之处。

【讨论】:

  • 请解释您所做的更改,以使其成为更有价值的答案。没有解释的答案不是好答案;)
  • 事实是问题没有完整的拦截器代码,以及导入。这就是为什么我只是把正确的实现。
猜你喜欢
  • 2017-11-07
  • 2018-07-08
  • 1970-01-01
  • 2023-03-13
  • 2018-03-30
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多