访问已被CORS政策禁止

时间:2019-06-19 07:17:29

标签: angular express cors

我有一台运行Angular应用程序的Express服务器(因为我需要服务器端渲染)。

问题是我第一次从应用程序发出请求时一切正常。

当我导航到某个页面时,会出现问题,然后返回到上一页,请求工作正常。当我向后浏览该请求不再起作用时,它显示了下一个错误:

  

从源访问“ http://myserver/api/endpoint”处的XMLHttpRequest   “ 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 :(得分:0)

对您的代码进行一些更改:

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();

});