отправка данных в виде JSON с AJAX на сервер Express вызывает ошибку предпусковой проверки - PullRequest
0 голосов
/ 09 ноября 2018

Этот вопрос задавался миллион раз. Я прочитал документацию Mozilla и просмотрел так много ответов, что у меня болят глаза.

В моем вызове Ajax у меня есть это:

    $.ajax({
  type: 'POST',
             dataType: 'json',
            data: {name: "test"},
            contentType: 'application/json',
  url: 'https://example.com:8443',
  success: function (data) {
    alert(data);
  }

в моем экспресс-сервере мой файл server.js такой:

app.post('/', function (req, res) {
    console.log(req.body.myData);
    res.header('Access-Control-Allow-Origin: *');
    res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
    return res.end('<h1>Hello, Secure World!</h1>');
});

насколько я понимаю, я правильно выполняю вызов ajax с dataType: 'json' и contentType 'application / json'.

Кроме того, я устанавливаю разрешение доступа для контроля доступа *, что должно позволить любому домену попадать на мой сервер. Я не могу понять, что я делаю неправильно. Я получаю эту ошибку:

has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 17 ноября 2018

Моя ошибка была глупой. В экспрессе JS это неверно:

res.header('Access-Control-Allow-Origin: *');
    res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');

Настройки должны быть такими: '','', а не ':'

The correct syntax that worked is this:
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, POST, PUT');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');

РЕДАКТИРОВАТЬ: Использование * представляет собой угрозу безопасности, но в этом случае это один сервер тестирования на другом, который принадлежит мне. При запуске я бы установил * на example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...