Я отредактировал свой ответ, и CORS уже настроен в NodeJS.

fetch('http://localhost:9000/api/app/contact', {
    method: 'POST',
    headers: {
        'content-type': 'application/json'
    },
    body: JSON.stringify({
        email: this.state.email,
        contactNumber: this.state.phone,
        enquiry: this.state.msg
    })
})
.then(function(res) { return res.json() })
.then(function(data) {
    alert('We will contact you shortly') 
});

я рендеринг выше кодирования, я столкнулся со следующей ошибкой:

Ошибка загрузкиHTTP: // локальный: 9000 / API / приложение / контакт: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: На запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». ПроисхождениеHTTP: // локальный: 8080Поэтому не допускается доступ. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Но когда я попробовал с почтальоном, это успешно работает. Пожалуйста, помогите мне, есть ли какой-либо код отсутствует в моем API загрузки.

Ниже приведен запрос POST почтальона и код.

следующий код: отправить запрос отPostman.

var data = JSON.stringify({
  "email": "[email protected]",
  "contactNumber": "0123456789",
  "enquiry": "Testing"
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "http://localhost:9000/api/app/contact");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("postman-token", "d5e08b69-5f0f-8193-e021-e2c3b1bfe1a3");

xhr.send(data);

На стороне сервера NodeJS у меня уже есть CORS в бэкэнде.

var express = require('express'),
    controller = require('./app.controller'),
    router = express.Router(),
    cors = require('cors');

var issue2options = {
  origin: true,
  methods: ['POST'],
  credentials: true,
  maxAge: 3600
};

router.post('/contact', cors(issue2options), controller.sendContactForm);
module.exports = router;
 sideshowbarker08 сент. 2017 г., 05:00
Поддержка CORS должна быть добавлена ​​/ включена на сервере, работающем наhttp://localhost:9000, Видетьenable-cors.org/server.html а такжеdeveloper.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
 sideshowbarker08 сент. 2017 г., 05:11
Правильно ли я прочитал в вашем коде, что на сервере узла у вас включена только CORS для/contact маршрут, но что ваш код веб-интерфейса делает запрос/api/app/contact? На бэкэнд-узле они каким-то образом разрешают один и тот же маршрут? Чтобы изолировать / устранить проблему, пробовали ли вы тестировать с временным включением CORS для всех маршрутов, а не только для этого?
 PPShein08 сент. 2017 г., 05:06
@sideshowbarker Я отредактировал свой ответ и настроил CORS в узле.

Ответы на вопрос(2)

Чтобы это исправить, вам нужен сервер вhttp://localhost:9000/api/app/contact вернуть в своих заголовках заголовок CORS, например, такAccess-Control-Allow-Origin: *

Читайте здесь для подробного ознакомления с CORShttps://enable-cors.org/server.html

 PPShein08 сент. 2017 г., 05:07
Я отредактировал свой ответ, и CORS уже настроен в NodeJS.
Решение Вопроса

Вам нужно добавить явноеOPTIONS обработка дляПредпусковые курсы CORS которые браузеры отправляют самостоятельно:

app.options('/contact', cors(issue2options)); // enable preflight OPTIONS
router.post('/contact', cors(issue2options), controller.sendContactForm);

Видетьhttps://www.npmjs.com/package/cors#enabling-cors-pre-flight

Ваш ответ на вопрос