Есть ли какая-либо разница между этими двумя методами post [Typescript]?

#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), и он будет отклоняться только при сбое сети или если что-либо помешало завершению запроса.

Подробнее здесь