我正在使用Angular Http
发布到我的API,当响应的状态为200时,它将正确解析它并仅输出期望的响应,我将在第一个.then()
中处理按照承诺,但是当我的API出错时,我将其状态为400并尝试通过.catch()
块进行处理。
我遇到的问题是.catch()
不仅有来自我api的原始json错误,还只是未定义。我从API收到的错误响应如下:
{
"status": 400,
"message": "Bad request",
"errors": [
{
"code": "IN_USE",
"message": "Email is in use",
"field": "email"
}
],
"data": []
}
我确保我发送的application/json
标头的响应分别为200和400,所以我不确定为什么我的打字稿代码不会解析.catch()
上的json
我的打字稿由两个文件api
和user
组成,用户只需扩展api即可使用我创建的post()
方法:
api.ts
/**
* POST to the API
* @param path Where to go
* @param params What to send
*/
public post(path, params): Promise<any> {
return this.http
.post(this.apiUrl + path, params)
.toPromise()
.then(r => r.json());
}
user.ts
/**
* Registers a user and then logs them in via token
* @param name Users name
* @param email Users email
* @param password Users password
*/
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
console.log(r);
})
.catch(r => {
// This is undefined
console.log(r);
});
}
答案 0 :(得分:1)
您可以尝试在.then(r => )
部分中检查状态消息,然后根据状态进行逻辑处理。
register(name: string, email: string, password: string) {
this.post('/register', {
access_token: this.accessToken,
name: name,
email: email,
password: password
})
.then(r => {
// This logs the json just fine
if(r.status == 200){
console.log(r);
}
if(r.status == 400){
console.log(r);
}
})
.catch(r => {
// This is undefined
console.log(r);
});
}
答案 1 :(得分:1)
由于请求失败(状态码为400),因此不会通过then
回调传递,它将转到catch
,因为{中没有任何回调{1}}方法将冒泡到post
方法捕获,因为您没有解析为json,因此它不会是json。
尝试一下:
register