Я выполняю обработку ошибок для загрузки файла в ответ. Но я борюсь с обработкой различных типов ошибок и сообщений об ошибках.
В приложении могут быть ошибки и сообщения об ошибках при загрузке файла, некоторые перехватываются по реакции, а некоторые перехватываются django ( бэкэнд):
- Поле загрузки файла не заполнено пользователем: в этом случае ошибка отлавливается реакцией и появляется сообщение: «Отправленные данные не были файлом. Проверьте тип кодировки в форме ".
- Загрузка файла не является аудиофайлом: Ошибка обнаруживается валидатором в django бэкенде и появляется сообщение:« Неподдерживаемый тип файла. Поддерживаемые типы файлов истории: .mp3 , .wav и .mp4 "
- Файл слишком велик для загрузки: Ошибка перехватывается бэкэндом валидатора и появляется сообщение:« Аудио файл превышает 200 МБ »
В частности, для первой ошибки в реакции, т. Е. Когда поле загрузки файла не заполнено, должно появиться сообщение об ошибке, напоминающее что-то вроде «это поле не может оставаться пустым, укажите аудиофайл ".
Конкретный вопрос: Как мне управлять настройкой этого сообщения об ошибке в реакции? Если я просто предоставляю жестко закодированное сообщение, внутренние сообщения, касающиеся типа файла и размера файла, не отображаются.
Общие вопросы: я исправляю некоторые ошибки в бэкэнде с django некоторые в интерфейс с реагировать. Рекомендуется, чтобы все управлялось в бэкэнде или во внешнем интерфейсе.
История компонентов
onSubmit = e => {
e.preventDefault();
let { title, content, audio} = this.state;
let formDataStory = new FormData(); // create form formData
formDataStory.append('audio', audio); // add audio to formData
formDataStory.append('title', title); // add title to formData
formDataStory.append('content', content); // add content to formData
this.props.addStory(formDataStory) // call addStory function with formDataStory as Input to create new Story
.then(() => {
this.setState({
title: "", // clear title field after submission
content:"", // clear content field after submission
});
this.inputRef.current.value = ''; // clear file field after submission
})
};
История действий
// ADD Story
export const addStory = formDataStory => (dispatch, getState) =>
new Promise((resolve, reject) => {
axios.post(apiBase +"/story/", formDataStory, tokenConfig(getState) )
.then(res => {
dispatch(createMessage({ addStory: "Story Added" }));
dispatch({
type: ADD_STORY,
payload: res.data
});
resolve(res);
})
.catch(err => {
reject(err);
dispatch(returnErrors(err.response.data, err.response.status))
}
);
});
История ошибок
componentDidUpdate(prevProps) {
const { error, alert, message } = this.props;
if (error !== prevProps.error) {
if (error.msg.title) alert.error(`Please provide a title to your story`); //
if (error.msg.content) alert.error(`Please provide a short description to your story`);
if (error.msg.audio) alert.error(`Audio: ${error.msg.audio.join()}`);
}
if (message !== prevProps.message) {
if (message.addStory) alert.success(message.addStory);
}
}
render() {
return <Fragment />;
}
}
Большое спасибо!