Angular:您可以提取文本responseType的状态吗?

时间:2019-03-26 16:24:48

标签: javascript angular spring-boot

我有一个使用Spring Boot创建的服务器项目,该项目返回带有字符串的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).

我知道我可以将post的第三个参数更改为

{responseType: 'text'}

并摆脱错误,但是我不知道如何获得这种响应的状态码。

有办法吗?

2 个答案:

答案 0 :(得分:1)

subscribe的第一个回调称为next回调,只要可观察对象发出一个值,就会调用该回调。如果发生错误,将调用error回调,它可以作为subscribe的第二个参数提供(还有其他选择)。在使用alert not 没看到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!');
    }
});

答案 1 :(得分:0)

if (parseInt(response.status) === 200)

由于response.status是字符串,因此您不能使用===运算符进行检查,因为这会同时检查类型和值。