Как вернуть весь HTTP-ответ в угловых, чтобы просмотреть конкретные заголовки ответа? - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь проверить конкретные заголовки ответа в моем угловом приложении. Если пользователь пытается получить доступ к маршруту, для которого требуется допустимый JWT, с истекшим сроком действия JWT, заголовок ответа от внутреннего сервера ASP.NET Core имеет значение token-expired: true. Я хотел бы проверить это значение перед отправкой пользователя по маршруту обновления.

Я попробовал следующее, чтобы просмотреть весь заголовок ответа, но мне не удалось:

`public fetchPosts(): Observable<HttpResponse<Object>>  {
    var b = this.http.get<HttpResponse<Object>>('api/v1/posts', {observe: 'response'}).pipe(
      tap(resp => console.log('THE RESPONSE FOR FETCH POSTS IS:', resp))
    )
    console.log('THIS IS VALUE OF B: ', b);
    return b;
  }`

Значение b всегда такое:

`
Observable {_isScalar: false, source: Observable, operator: DoOperator}
post.service.ts:20
_isScalar:false
operator:DoOperator {nextOrObserver: , error: undefined, complete: undefined}
complete:undefined
error:undefined
nextOrObserver:function (resp) { … }
[[FunctionLocation]]:internal#location
[[Scopes]]:Scopes[2]
arguments:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
caller:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
length:1
name:""
prototype:Object {constructor: }
`

Я понимаю, что мне нужно будет специально представлять определенные заголовки ответа на моем внутреннем сервере, но тот факт, что объект b имеет ключи error и complete обоих неопределенных, заставляет меня задуматься, я что-то делаю не так?

Любое понимание будет с благодарностью.

1 Ответ

1 голос
/ 18 марта 2019

Ответ Http с его заголовками - это то, что выдается как событие ошибки, когда HttpClient получает ответ об ошибке от сервера, как описано в руководстве . Поэтому вам просто нужно предоставить обработчик ошибок при подписке (или с использованием tap() или catchError()).

.pipe(
    catchError(error => {
        const responseHeader = error.headers.get('<header_name>');
        if (responseHeader) {
            // send to /refresh-token route
        }
    })
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...