По-прежнему возникает ошибка CORS в Chrome после добавления заголовков на сервер Node.js Express.js. - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь сделать простой GET запрос к XML файлу, и я застрял на этой CORS ошибке.

Я пробовал несколько решений, включая добавление заголовков вручную в мой файл server.js и использование пакета cors NPM. С обоими из них, если я попаду в конечную точку в Postman, я смогу увидеть заголовки, прикрепленные к запросу, а также ответ.

Однако в Google Chrome заголовки не прикрепляются к запросу. Вот код в моем index.html файле:

<body>
  <h1>test</h1>
  <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
  <!-- <script src="./server.js"></script>  -->
  <script>
    var xhr = new XMLHttpRequest();
    xhr.open('GET', http://11.111.111.111/web/data/data.xml, true);
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*') 
    xhr.withCredentials = true;
    xhr.send(null);
  </script>
</body>

Обратите внимание, что я заменил URL-адрес страницы XML, с которой я пытаюсь получить информацию, заполнителем.

Вот код в моем server.js файле:

var express = require("express");
var bodyParser = require("body-parser");
var path = require("path");
var cors = require('cors')
// Sets up the Express App
var app = express();

var PORT = 3000;
app.use(cors())
app.options('*', cors()) // include before other routes

// Sets up the Express app to handle data parsing
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());

// Routes
app.get("/test", function(req, res) {
   //res.set({
   // 'Access-Control-Allow-Origin': ['*'],
   // 'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE',
   // 'Access-Control-Allow-Headers': 'Content-Type'
   // });
  res.sendFile(path.join(__dirname, "./index.html"));
  console.log('hit me')
  console.log(res);
});

app.get("/", function(req, res) {
  res.send('Houston, we have a problem.')
});

// Starts the server to begin listening
app.listen(PORT, function() {
  console.log("App listening on PORT " + PORT);
});

А вот скриншот с выхода почтальона screenshot from dev-tools

Я добавил xhr.setRequestHeader('Access-Control-Allow-Origin', '*') в свой клиентский запрос xhr и переключился на использование пакета cors. Теперь я получаю эту ошибку:

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

Я добавил app.options('*', cors()) // include before other routes, как объяснено в документации npm cors, но я все еще получаю ту же ошибку. Однако заголовки прикрепляются к запросу в dev-tools. Я обновил код и снимки экрана в этом посте, чтобы отразить эти изменения.

скриншот с dev-tools:
screenshot from dev-tools

Ответы [ 2 ]

0 голосов
/ 11 июля 2018

наконец получил ответ от этой команды, и оказалось, что сервер настроен на блокировку всех запросов cors.

0 голосов
/ 04 июля 2018

Если это только для локального тестирования, попробуйте это: https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi или попробуйте это https://www.npmjs.com/package/cors.

импорт cors из 'cors'

app.use (CORS ())

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