Другие ответы хорошо относятся к вашей первоначальной проблеме. Чтобы ответить на ваши последующие вопросы
when i do it now it not get the catch and contine to .then and send me success message
Fetch не будет отклонять обещание для неудачных кодов состояния HTTP. Это может быть сюрпризом по сравнению с Angular или jQuery. Fetch только отклонит обещание об ошибках сетевого уровня, соединение оборвалось и т. Д. c.
Это указано в документах
То, что вы можете сделать вместо этого, это нечто например:
fetch("http://localhost:3000/api/register", options)
.then(async response => {
if (!response.ok)
throw new Error(await response.text());
return response;
})
.then(response => response.json())
.then(user => {
alert('Registration successful !')
this.props.history.push("/");
})
.catch(err => {
console.error(err)
console.log(err.message)
});
Он проверит успешный код состояния HTTP и отклонит цепочку обещаний с ответом сервера, если это не так. Возможно, вы захотите создать собственное исключение, расширяющее класс Error, а не выбрасывать его напрямую.