Не удается получить тело запроса при использовании Fetch API, но JQuery AJAX работает

Я работаю над проектом, где

  1. Мои API написаны на Express.js (4.16) - в ПОРТ: 1337
  2. Фронтенд-приложение находится в React.js (16.2) - в PORT: 3000

Итак, есть несколько API-интерфейсов, которые мне нужно вызвать из приложения React.js, проблема, с которой я столкнулся:

ПРОБЛЕМА -

НЕ РАБОТАЕТ - fetch () API

fetch('localhost:1337/rest/api', {
    body: JSON.stringify( {name: "Sidd", "info": "Lorem ipsum dolor .."} ),
    headers: {
        'Accept': 'application/json, text/plain, */*',
        'Content-Type': 'application/json'
    },
    mode: 'no-cors',
    method: 'post'
})

Когда я использую fetch () API, я не получаю тело запроса в моем API, определенном в Express.js

console.info(req.body) // On logging the request body
{} // am getting this [empty]

РАБОТАЕТ - jQuery AJAX

$.ajax('localhost:1337/rest/api', {
    type: 'post',
    data: {name: "Sidd", "info": "Lorem ipsum dolor .."},  
    dataType: 'application/json',
    success: function (data, status, xhr) {
        console.info('status: ' + status + ', data: ' + data);
    },
    error: function (jqXhr, textStatus, errorMessage) {
        console.info('Error' + errorMessage);
    }
});

Однако я получаю ОШИБКУ No 'Access-Control-Allow-Origin' header is present on the requested resource.!

Но, по крайней мере, в этом случае я ПОЛУЧАЮЩИЙ тело запроса в моем API. Также протестировал мои API через POSTMAN, и они работают полностью нормально. Я видел все обсуждения в Интернете, но ничего не работает.

Ой! Я также хотел бы добавить это - в моей настройке Express.js я правильно использую body-parser

app.use(bodyParser.json({limit: '2mb'}));                           // 2mb file upload limit
app.use(bodyParser.urlencoded({limit: '2mb', extended: true}));     // 2mb file upload limit

ЧТО Я ХОЧУ!

  1. Решение для fetch () API
  2. Если НЕ fetch () API, как удалить ошибку No 'Access-Control-Allow-Origin' из моего вызова jQuery Ajax.
  3. Что я делаю неправильно?

Спасибо, парни!

Возможный дубликат как-включить-cors-from-nodejs-server

Shubham Khatri 21.03.2018 07:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
1 293
1

Ответы 1

Поскольку 1337 и 3000 - разные порты, вы сталкиваетесь с запросом CORS.

Сначала установите mode: cors в запросе на выборку, а затем добавьте обработчик маршрутизатора.

router.use((req, res, next) => {
  res.header('access-control-allow-origin', 'http://localhost:3000')
  res.header('Access-Control-Allow-Credentials', true)
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With')
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  res.header('Access-Control-Max-Age', 1728000)
  if (req.method === 'OPTIONS') {
    return res.json({ status: 0, message: '', payload: null })
  }
  next()
})

перед вашим обработчиком rest/api.

После этого все готово.

Что ж, это решит проблему +1 для этого, но что насчет [fetch API]? Есть подсказка?

Siddhartha Chowdhury 21.03.2018 11:07

Вы можете прочитать документацию Использование Fetch для более подробной информации. И если вы не уверены в свойстве mode, ознакомьтесь с Запрос()

L_K 22.03.2018 02:50

Ваш ответ помог мне понять, что мне нужно разрешить учетные данные в моих настройках, связанных с CORS, в приложении Django. Так что спасибо за это.

Kim Stacks 06.05.2018 09:25

Другие вопросы по теме