我有CORS问题,并花了很多时间试图解决它,所以我决定在这里问一个问题。我有一个子域的keystone应用程序到我的angular 5应用程序的域。在localhost一切正常,但是,当我把我的文件放到服务器并尝试打开我的角度应用程序时,我收到此错误:
无法加载http://xxxxxxxx.com/label:预检响应中的Access-Control-Allow-Headers不允许使用请求标头字段参数。
我已将此行添加到我的keystone.js文件中:
keystone.set('cors allow origin', true);
keystone.set('cors allow methods', true);
keystone.set('cors allow headers', true);
而这行在routes / index.js中:
app.all('/*', keystone.middleware.cors);
我尝试将此添加到routes / index.js:
app.options('/*', function(req, res) {
res.header("Access-Control-Allow-Credentials", "true");
res.header('Access-Control-Allow-Methods', 'GET,POST');
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.sendStatus(200);
});
但我仍然得到同样的错误。任何建议如何解决?
安装此软件包https://www.npmjs.com/package/cors并管理您的CORS域。
基本用法
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors())
好的错误消息说明了一切(admittdely不是很清楚) - 预检响应中的Access-Control-Allow-Headers不允许请求头字段参数。 - 这意味着有一个名为params
的请求头,它不包含在Access-Control-Allow-Headers(ACAH)响应头中。
将ACAH更改为:
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, params");
你应该没事
并不是说添加单独的包也不能解决问题,但是您不需要添加新包来使其工作。
我也在使用Keystone.js,我正在编辑/routes/middleware.js,在文件末尾添加以下行:
/*
* CORS
*/
exports.setCors = 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', 'Content-Type');
}