Angular: Можете ли вы извлечь статус текстового responseType? - PullRequest
2 голосов
/ 26 марта 2019

У меня есть проект с сервером, созданный с помощью весенней загрузки, который возвращает ResponseEntity со строкой для отправки запросов.Я бы хотел, чтобы мое угловое приложение реагировало на основании статуса ответа.

this.httpClient.post(
    'http://localhost:8080/users',
    {
        "username": username,
        "email": email,
        "password": password
    },
    {
        observe: 'response'
    })
.subscribe(response => {
    if (response.status === 200) {
        alert('Hello!');
    }
 });

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

"Http failure during parsing for http://localhost:8080/users"
(status is 200 as expected but alert does not work).

Я знаю, что могу изменить третий параметр сообщения на

{responseType: 'text'}

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

Есть ли способ сделать это?

Ответы [ 2 ]

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

Первый обратный вызов к subscribe известен как обратный вызов next, который вызывается всякий раз, когда наблюдаемое излучает значение. Если есть ошибка, вызывается обратный вызов error, который может быть предоставлен в качестве второго параметра для subscribe (есть другие альтернативы). Причина, по которой вы не видите свой alert огонь, когда не с использованием responseType: 'text', заключается в том, что предоставленная вами функция обратного вызова не вызывается при возникновении ошибки.

Как я уже предлагал, одним из вариантов будет предоставление обратного вызова с ошибкой. Вот пример:

this.httpClient.post(
    'http://localhost:8080/users',
    { username, email, password },
    { observe: 'response' })
.subscribe(
    response => {
        // Only called for success.
        ...
    },
    errorResponse => {
        // Called when there's an error (e.g. parsing failure).
        if (errorResponse.status === 200) {
            alert('Hello (for real this time)!');
        }
    });

Перечитав оригинальный вопрос здесь, я думаю, что ваша настоящая проблема может заключаться в том, что вы не комбинируете responseType: 'text' и observe: 'response'. Вот как это будет выглядеть:

this.httpClient.post(
    'http://localhost:8080/users',
    { username, email, password },
    { observe: 'response', responseType: 'text' })
.subscribe(response => {
    if (response.status === 200) {
        alert('Hello!');
    }
});
0 голосов
/ 26 марта 2019
if (parseInt(response.status) === 200)

Поскольку response.status является строкой, и вы не можете проверить с помощью оператора ===, так как это проверяет и тип, и значение.

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