Загрузка данных на целевую страницу из API REST с помощью Interceptor Angular 6 - PullRequest
0 голосов
/ 06 октября 2018

Я хочу показать данные на домашней странице из API REST (требуется авторизация 'username' и 'password' для доступа) с использованием Interceptor в Angular 6. Однако ранее я использовал Node.js для получения данных иэто было довольно успешно в то время.Более того, когда я переключаюсь на перехватчик, он показывает следующую ошибку:

ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:41)
at subscribeToResult (subscribeToResult.js:6)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub (mergeMap.js:70)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:67)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:50)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
at Observable._subscribe (scalar.js:5)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:42)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js:28)
at MergeMapOperator.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapOperator.call (mergeMap.js:28)

В моем решении я создал функцию в компоненте посадки, которая выглядит следующим образом:

const userData = { username: 'anonymous', password: '' };

this.http
  .post(`${this.baseURL}/auth/jwt/authenticate`, userData)
  .subscribe(res => {
    // console.log(res);
    const token = JSON.parse(res['_body']).token;
    this.publicToken = token;
    if (token) {
      this.publicTokenStatusListener.next(true);
      localStorage.setItem('public-token', token);
    }
  });

Перехватчик выглядит так:

intercept(
        req: HttpRequest<any>,
        next: HttpHandler
    ): Observable<HttpEvent<any>> {

const authToken = localStorage.getItem('public-token');

        
const copiedReq = req.clone({
    params: req.params.set('auth', authToken)
});

return next.handle(copiedReq);

}

Из службы я возвращаю данные REST (GET), чтобы получить наблюдаемое.Однако, это не работает, как я ожидаю.

Я могу получить «жетон» в Перехватчике.Жду некоторых предложений.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 октября 2018

HttpParams is неизменяемый .

Вам необходимо использовать setParams вместо params:

const copiedReq = req.clone({
    setParams: {'auth': authToken}
});

Вы уверены, что чувствительные данные должны быть переданы как params?

Может быть, будет лучше использовать headers?

...