Я начал изучать API с помощью flask restful и angular 6, я добился некоторого прогресса, но я застрял, пытаясь получить ответ API json с angular и извлечь сообщение, которое у него есть.
Мне удалось заставить его работать с настраиваемыми исключениями при возникновении ошибки, поэтому, если api обнаружит и обнаружит ошибку, он вызовет исключение, и flask ответит примерно так:
{
'message': "An account with this email already exists.",
'status': 409,
}
И это работает, мне удалось отправить уведомление с этим сообщением пользователю в angular с помощью этого:
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.info(err);
он печатает только сообщение, даже если тело ответа содержит весь json, данные, с другой стороны (когда нет ошибки), если я
console.info(data);
он печатает весь json.
Я знаю, что если я сделаю что-то вроде data ['message'], это сработает, но я хочу знать, почему при возникновении ошибки переменная err содержит только сообщение, а data содержит весь json.
Оба ответа от API имеют одинаковые заголовки, одно и то же тело, единственное, что изменяется, - это сообщение и статус в json. Но когда я console.info переменную 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».
Я думал сделать каждый ответ исключением, но в этом нет смысла.





если у данных нет сообщения, он вернет
None