#javascript #fetch
#javascript #выборка
Вопрос:
Привет, я пытаюсь отправить запрос с помощью метода выборки. Обычно я использую axios для отправки запроса. Теперь я пробую что-то новое в typescript.
Вот версия запроса axios. Он работает нормально. Электронное письмо было отправлено
axios
.post('http://localhost:3000/login/email', { email: emailToBeSent })
.then(res => {
alert(emailToBeSent);
})
.catch(err => {
alert(emailToBeSent 'error not sent');
});
Но когда я пытаюсь выполнить выборку, почта не отправляется, а ответ возвращает успех, но указывает на плохой запрос
const data = { email: emailToBeSent };
fetch('http://localhost:3000/login/email', {
method: 'POST', // or 'PUT'
body: JSON.stringify(data),
})
.then(response => {
console.log('Success:', response);
})
.catch(error => {
alert('Error:');
});
Кто-нибудь может подсказать, чего мне здесь не хватает?
Вот ответ
Комментарии:
1. Попробуйте добавить
headers: { 'Content-Type': 'application/json' },
в конфигурацию запроса на выборку2. Рассмотрите возможность использования
async
иawait fetch
вместо цепнойPromise
обработки в старом стиле.3. Ошибка HTTP не считается ошибкой
fetch
, поэтому вы должныresponse.ok
посмотреть, действительно ли это было нормально.4. @AlekseyL. ах, спасибо. Я неправильно истолковал сообщение об ошибке, поскольку проблема, по-видимому, связана с CORS.
Ответ №1:
Скорее всего, сервер отклоняет запрос, потому что тип содержимого не указан (axios делает это за вас по умолчанию). Добавьте Content-Type
заголовок:
fetch('http://localhost:3000/login/email', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
})
Что касается ошибки:
Обещание, возвращенное из fetch(), не будет отклонено при статусе ошибки HTTP, даже если ответом является HTTP 404 или 500. Вместо этого он будет разрешаться нормально (со статусом ok, установленным на false), и он будет отклоняться только при сбое сети или если что-либо помешало завершению запроса.
Подробнее здесь