在Flask Restful和Angular 6中使用JSON响应

时间:2018-09-17 09:15:56

标签: angular angular6 flask-restful

我开始使用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可序列化”错误。

我考虑过将每个响应都设为例外,但这只是没有道理。

0 个答案:

没有答案