JS Fetch-无法从BadRequest响应中获取数据

时间:2019-02-26 12:59:34

标签: javascript reactjs ecmascript-6 redux es6-promise

我在客户端使用React + Redux,并且在NET CORE中拥有后端。 客户端使用以下方法从API获取数据:

        return fetch(`api/login`, requestOptions)
        .then(response => {
            if(!response.ok) {
                return Promise.reject(response.json() as Promise<AuthError>);
            } else {
                return response.json() as Promise<ILoginResponse>
            }
        })

requstOptions是:

        const requestOptions = {
        method: 'POST',
        headers: {
            'Accept': 'application/json', 
            'Content-Type': 'application/json' },
        body: JSON.stringify({ username, password })
        };

密码错误时,服务器返回

404 Bad request

主体为:

{"errorCode":2,"description":"Invalid Password"}

我想阅读正文,但是使用此代码,这是不可能的,因为此response.json() as Promise<AuthError>会生成一个空对象。 有没有办法读取错误请求响应的正文?

2 个答案:

答案 0 :(得分:-1)

您是否尝试过使用catch,然后检查错误对象?

...
.then(response => response.json())
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.dir(error));

答案 1 :(得分:-1)

按照Fetch Documentation

“即使响应是HTTP 404或500,从fetch()返回的Promise也不会拒绝HTTP错误状态。相反,它将正常解析(ok状态设置为false),并且只会拒绝网络出现故障或是否有任何阻止请求完成的情况。”

您还可以查看Response对象文档。在这里,您可以检查Response ok是否设置为false(因此,在then子句中检查response.ok),然后可以检查Response.text属性。还要检查Response Documentation