Доступ был заблокирован политикой CORS - PullRequest
0 голосов
/ 19 июня 2019

У меня есть сервер Express, на котором я запускаю приложение Angular (потому что мне нужен рендеринг на стороне сервера).

Проблема в том, что при первом обращении к приложению все работает нормально.

Проблема появляется, когда я перехожу на какую-то страницу и возвращаюсь на предыдущую страницу, где запрос работал нормально. Когда я возвращаюсь назад, запрос больше не работает, он показывает мне следующую ошибку:

Доступ к XMLHttpRequest по адресу http://myserver/api/endpoint' от источника 'http://localhost:4000' заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс.

Я пытался использовать CORS и другие вещи, но в итоге выдает ту же ошибку.

Это та часть, где я использую CORS:

const allowedOrigins = [
  'http://localhost:4000',
  'http://localhost:4200',
  'http://myserver'
];

const corsOptions = {
  origin: function(origin, callback) {
    if (!origin) {
      return callback(null, true);
    }

    if (allowedOrigins.indexOf(origin) === -1) {
      const msg = 'The CORS policy for this site does not allow access from the specified Origin.';
      return callback(new Error(msg), false);
    }

    return callback(null, true);
  },
  credentials: true,
  optionsSuccessStatus: 200,
  methods: 'GET,PUT,POST,OPTIONS',
  allowedHeaders: 'Content-Type,Authorization'
};

app.use(cors(corsOptions));

Попробовал также без CORS:

app.use(function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-Type');
  res.setHeader('Access-Control-Allow-Credentials', true);
  next();
});

Итак, в чем может быть проблема, что первый раз работает, а второй нет?

Может ли это быть связано с этой ошибкой из экспресс-консоли: «ОШИБКА TypeError: spanEl.getBoundingClientRect не является функцией»?

1 Ответ

0 голосов
/ 19 июня 2019

Внесите некоторые изменения в свой код:

app.use(function (req, res, next) {

    // website you wish to  allow to connet    
    res.setHeader('Access-Control-Allow-Origin','*');

    // request method you wish to allow
    res.setHeader('Access-Control-Allow-Methods','GET, POST, OPTION, PUT, PATCH, DELETE');

    // request headers you wish to allow 
    res.setHeader('Access-Control-Allow-Headers','X-Requested-With,content-type,Authorization');   

    // set to true if you need the website to include  cookies  in the  request  sent 
    // to the API (eg. in case you can see sessions )
    res.setHeader('Access-Control-Allow-Credentials','false');

    // pass to the next layer of middleware
    next();

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