Я начал изучать 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».
Я думал о том, чтобы сделать каждый ответ исключением, но это не имеет смысла.