节点的 CORS 问题

Posted

技术标签:

【中文标题】节点的 CORS 问题【英文标题】:CORS issue with Node 【发布时间】:2013-03-29 23:52:23 【问题描述】:

所以我正在设置一个应用程序以允许跨域请求。一直在使用这篇帖子中的各种方法How to enable cross-origin resource sharing (CORS) in the express.js framework on node.js

但是我收到了一个我似乎无法解决的错误。这是我正在使用的(不是我尝试了大约 3 种概述的方法 - 它们都给出了相同的错误)。

 app.use(function(req, res, next)
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With');
  next();
)
.options('*', function(req, res, next)
    res.end();
);

这仍然给我一个错误:

XMLHttpRequest cannot load http://localhost:3000/blah. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

如果我注释掉最上面的代码,我会得到预期的不允许错误,这似乎表明该代码正在正确处理请求。我还重新输入了内容类型请求,以确保我没有粘贴奇数字符。有什么线索吗?

【问题讨论】:

【参考方案1】:

使用 cors 插件,这样更简单,无需手动设置 res.header

在此处获取插件:https://github.com/troygoode/node-cors

示例 REST API 代码:

'use strict';

var express = require('express'),
    cors = require('cors'),
    port = process.env.PORT || 3000,
    connect = require('connect'),
    app = express();

app.use(connect.bodyParser()); //For POST method JSON form data

//GET method
app.get('/books', cors(), function(req, res)
      //send JSON etc
      res.json();
);

//POST method
app.post('/books/', cors(), function(req, res)                          
    var book = req.body;

    //insert book to DB etc

    //send result back to client
    res.send(book);
);

//start server on port 3000
if(!module.parent)
  app.listen(port, function()
    console.log('Express server listening on port ' + port + '.');
  );

现在您可以从任何位置、端口等访问 REST API,干杯

【讨论】:

【参考方案2】:

您有两个 Access-Control-Allow-Headers 标头。最后一个会赢。

您可能想要一个 Access-Control-Allow-Headers 标头,其值是逗号分隔的列表。

【讨论】:

以上是关于节点的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

我的节点 package.json 中的 cores 和 cors 有啥区别?

具有 REST 身份验证 API 的节点快递网站 - CORS 问题

反应前端,节点后端CORS问题[关闭]

如何从 geth 控制台为仲裁节点启用 CORS?

反应连接到节点 Cors 预检失败

Salesforce Oauth 重定向 CORS 问题节点快速应用程序