Quiero interceptar cada solicitud a la API y verificar el código de estado para que pueda mostrar un mensaje o redirigir a un componente específico, pero está dando el siguiente error:

main.js: 1580 TypeError: proporcionó 'undefined' donde se esperaba una transmisión. Puede proporcionar un> Observable, Promise, Array o Iterable.at subscribeTo (vendor.js: 179688) en subscribeToResult (vendor.js: 179824) en MergeMapSubscriber._innerSub (vendor.js: 175271) en mergeMapSubscriber._tryNext (vendor. js: 175265) en MergeMapSubscriber._next (vendor.js: 175248) en MergeMapSubscriber.next (vendor.js: 170316) en Observable._subscribe (vendor.js: 172287) en Observable._trySubscribe (vendor.js: 169772) en Observable .subscribe (vendor.js: 169758) en MergeMapOperator.call (vendor.js: 175233)

Este es mi AuthInterceptor:

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { tap } from 'rxjs/operators'; 
import { CommonService } from '../common.service';
import { Router } from '@angular/router';
import { AuthenticationService } from './authentication.service';


@Injectable({
  providedIn: 'root'
})
export class AuthInterceptorService implements HttpInterceptor {

  constructor(
    private common: CommonService,
    private router: Router,
    private auth: AuthenticationService
  ) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.headers.get('No-Auth') === 'True') {
      return next.handle(req.clone());
    }
    // To attach header on every request
    if (localStorage.getItem('currentUser') != null) {
      const clonedreq = req.clone({
        headers: req.headers.set('Authorization', 'Bearer ' + localStorage.getItem('currentUser'))
      });
      return next.handle(clonedreq).pipe(tap(
        succ => { },
        err => {
          if (err.status === 401) {
            this.router.navigateByUrl('/login');
          } else if (err.status === 403) {
            this.router.navigateByUrl('/Forbidden');
          } else if (err.status === 400) {
            this.router.navigateByUrl('/error404');
          }
        }
      ));
    } else {
      this.router.navigateByUrl('/login');
    }
  }
}

No puedo entender la línea o el bloque que lo está causando, ya que no está escrito en ninguna parte del error. El proyecto se compila muy bien. Este error se muestra en casi todas las páginas del proyecto donde se envía una solicitud a WEB Api.

0
Rishabh Tailor 24 dic. 2019 a las 09:26

2 respuestas

La mejor respuesta

En el bloque else te falta la declaración de devolución. Añadir return next.handle(req.clone()); en el bloque else cuando localStorage.getItem('currentUser') es nulo

1
Mukund Sonaiya 24 dic. 2019 a las 07:02

Rishabh, otros vinculan este error con la existencia de 'interceptores', este podría ser el caso. Sin embargo, hoy obtuve exactamente el mismo TypeError. Mi aplicación, actualmente todavía en desarrollo, no utiliza 'interceptores' (puede ser en el futuro quién sabe). Es una aplicación angular actualmente conectada a datos (versión 9.0.2) a una API (funciones firebase). Estaba implementando un nuevo componente (crud) 'contratistas' en el que decidí hacer uso de 'angular-in-memory-web-api' antes de almacenar datos en el backend

Tan pronto como implementé el módulo 'InMemoryWebApiModule.forRoot (ContractorData)' en la sección 'importaciones' de App.Module, noté que al recuperar otra entidad, de repente no pude llegar a la API que notaba en la consola del navegador:

ERROR TypeError: proporcionó 'indefinido' donde se esperaba una secuencia. * Puede proporcionar un Observable, Promesa, Array o Iterable.

Entonces, mi hipótesis es: implementar el InMemoryWebApiModule interfiere (en mi caso) el proceso HttpClient de tal manera, elimina o elimina información sobre la solicitud que se envía a la API.

Ver captura de pantalla ingrese la descripción de la imagen aquí

¡Con suerte, esto te ayudará un poco a investigar tu problema!

0
KWHJ 25 feb. 2020 a las 21:02