我开始使用flask restful和angular 6学习API,虽然取得了一些进步,但是我一直努力尝试获取带有angular的API json响应并提取其消息。
当出现错误时,我设法使其与自定义异常一起使用,因此,如果api找到并出错,它将引发异常,并且flask将响应以下内容:
{
'message': "An account with this email already exists.",
'status': 409,
}
那行得通,我设法将带有该消息的通知发送给用户,与此相关:
this.userService.register(this.registerForm.value)
.pipe(first())
.subscribe(
(data) => {
//THIS DOESN'T
this.notificationService.success(environment.notifications.successTitle, data);
this.router.navigate(['/login']);
},
(err) => {
// THIS WORKS!
this.notificationService.error(environment.notifications.errorTitle, err);
this.showSpinner = false;
});
当API如我在上面显示的json所示发送错误时,如果可以的话,它可以正常工作
console.log(err);
即使响应正文包含整个json,它也仅打印消息,如果我这样做,则另一方面(没有错误)数据
console.log(data);
它会打印整个json。
我知道,如果我执行data ['message']之类的操作会起作用,但是我想知道为什么当发生错误时,err变量仅包含消息,而数据包含整个json。>
来自API的两个响应都具有相同的标头,相同的主体,唯一改变的是消息和json中的状态。但是当我console.log err变量时,它仅显示消息,而另一方面,数据显示整个json。
我什至不知道这整个问题是一个问题还是旨在解决这个问题,在这种情况下,我应该使用data ['message']吗?如果数据由于某种原因没有消息怎么办?
我试图像这样从API返回:
return jsonify({"message": "Account created successfully."}), 201
return {"message": "Account created successfully."}, 201
return jsonify({"message": "Account created successfully.", "status": 201})
我也曾尝试创建一个自定义的Response(从烧瓶)实例,但没有成功。 而且,如果我使用jsonify,则会出现“不是JSON可序列化”错误。
我考虑过将每个响应都设为例外,但这只是没有道理。