Использование JSON-ответа от Flask Restful с Angular 6 - PullRequest
0 голосов
/ 17 сентября 2018

Я начал изучать API с помощью колбы restful и angular 6, я добился некоторого прогресса, но застрял, пытаясь получить ответ API json с angular и извлечь сообщение, которое у него есть.

Мне удалось заставить его работать с пользовательскими исключениями при возникновении ошибки, поэтому, если API находит и выдает ошибку, это вызовет исключение, и фляга ответит что-то вроде:

{
    '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.

Я даже не знаю, является ли весь этот вопрос проблемой или предназначен ли он для такой работы, в таком случае я должен использовать данные ['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, это выдает мне ошибку «is not JSON serializable».

Я думал о том, чтобы сделать каждый ответ исключением, но это не имеет смысла.

...