Не удается прочитать свойство 'длина' пустого значения при Angular вызове метода службы? - PullRequest
0 голосов
/ 14 февраля 2020

Я изменяю существующий Angular проект (не мой), добавляю новый вызов в мой внешний API.

Это метод обслуживания:

getUserName(): Observable<any> {
    return this.http.get<any>(environment.apiUrl + URLS.USER_NAME)
}

И я используйте его на appcomponent.ts следующим образом:

this.userService.getUserName().subscribe((name) => { 
  this.user = name
})

При выполнении я получаю следующую ошибку:

core. js: 1673 ERROR TypeError : Невозможно прочитать свойство 'length' со значением null в HttpHeaders .pu sh .. / node_modules/@angular/common/fesm5/http.js.HttpHeaders.applyUpdate ( http. js: 199) на http. js: 170 на Array.forEach () на HttpHeaders.pu sh .. / node_modules/@angular/common/fesm5/http.js.HttpHeaders.init (http. js: 170) по адресу HttpHeaders.pu sh .. / node_modules/@angular/common/fesm5/http.js.HttpHeaders.forEach (http. js: 235) по адресу Observable._subscribe (http. js: 1435) на Observable.pu sh .. / node_modules / rxjs / _esm5 / internal / Observable. js .Observable._trySubscribe (Observable. js: 43 ) в Observable.pu sh .. / node_modules / rxjs / _esm5 / intern al / Observable. js .Observable.subscribe (Observable. js: 29) на MapOperator.pu sh .. / node_modules / rxjs / _esm5 / internal / operator / map. js .MapOperator.call ( map. js: 18) at Observable.pu sh .. / node_modules / rxjs / _esm5 / internal / Observable. js .Observable.subscribe (Observable. js: 24)

Кажется, это проблема заголовков или какая-то ошибка подписки / наблюдаемая, но я не могу найти, где находится ошибка.

  • Что-то не так с моим кодом?
  • Это может быть существующий перехватчик, который изменяет запрос?

Обратите внимание, что перед выполнением запроса выдается исключение, поэтому это может быть проблема клиента при создании этого запроса.

Редактировать:

Это единственный перехватчик, который я нашел:

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

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.url.indexOf(environment.apiTFSmin) === -1) {
      let tenantReq = req.clone({ headers: req.headers.set('current', sessionStorage.getItem('current')) })
      if (sessionStorage.getItem('tenant') != null && sessionStorage.getItem('newTenant') == null) {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Tenant', sessionStorage.getItem('tenant')) })
      } else if (sessionStorage.getItem('newTenant') != null) {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Tenant', sessionStorage.getItem('newTenant')) })
        sessionStorage.removeItem('newTenant')
      }
      if (req.method === 'POST' || req.method === 'PUT') {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Content-Type', 'application/json') })
      }
      return next.handle(tenantReq)
    } else {
      const tenantReq = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + btoa('pescanilla-ext:m12345678*')) })
      // const tenantReq = req.clone()
      return next.handle(tenantReq)
    }
  }
}

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Вы не проверяете «текущий» заголовок на фактическое существование в хранилище.

let tenantReq = req.clone({ headers: req.headers.set('current', sessionStorage.getItem('current')) })

Редактировать: HttpClient выдаст ошибку, как только вы попытаетесь отправить запрос с заголовок с нулевым значением. Попробуйте заменить sessionStorage.getItem('current') на значение c и проверьте его.

0 голосов
/ 14 февраля 2020

this.userService.getUserName (). Subscribe ((имя) => {if (name) {this.user = name}})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...