我有一台运行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不是函数”?
答案 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();
});