Access-Control-Allow-Headers - Node / Express / KeystoneJs不允许使用标头字段

时间:2018-01-23 12:10:33

标签: javascript node.js express cors keystonejs

我有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);
    });

但我仍然得到同样的错误。有任何建议如何解决?

3 个答案:

答案 0 :(得分:1)

安装此软件包https://www.npmjs.com/package/cors并管理您的CORS域。

基本用法

(o .: "path") >>= withArray "Path info" (parseJSON . (V.! 2))

答案 1 :(得分:0)

错误消息说明了一切(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");

你应该没事。

并非添加单独的软件包不会解决问题,但您不需要 添加新软件包以使其正常工作。

答案 2 :(得分:0)

我也在使用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');
}