Node.js Node Express服务器中的CORS正则表达式

Node.js Node Express服务器中的CORS正则表达式,node.js,regex,express,cors,Node.js,Regex,Express,Cors,我正在创建一个express服务器。这是片段 const app = express(); app.use(cookieParser()); // mainly used to retrieve and store CSSO tokens app.use(bodyParser.json()); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "https://the.real.ur

我正在创建一个
express
服务器。这是片段

const app = express();
app.use(cookieParser()); // mainly used to retrieve and store CSSO tokens
app.use(bodyParser.json());

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "https://the.real.url.com:8081");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header("Access-Control-Expose-Headers", "Content-Disposition, Content-Type");
    res.header("Access-Control-Allow-Credentials", true);
    next();
});
它目前正在工作。但是我需要替换
https://the.real.url.com:8081
带有
正则表达式
。 首先,它可以是
https
,也可以是
http
。 第二,可能有也可能没有端口。等等

所以当我编辑它时,
https?://the.real.url.com:8081
允许
http
https

我得到这个错误
Access Control Allow Origin”标头包含无效值“https://The.real.url.com:8081”。起源'https://the.real.url.com:8081因此,不允许访问。

我还尝试了http(s?)://the.real.url.com:8081,
https?://*
,以及其他变体。它们都不起作用

所以我想知道
Regex
是不允许的吗?但是通配符
*
有效


我做错什么了吗

访问控制允许原点标题可以是:

  • *
    允许来自任何地方
  • /
    作为路径的特定URL
不能将正则表达式放在那里


您可以将正则表达式应用于请求中的
Origin
头,如果匹配,则将值从
Origin
请求头复制到
访问控制允许Origin
响应头

var origin = req.get("Origin");
if (origin && origin.match(your_regex)) {
    res.header("Access-Control-Allow-Origin", origin);
}


或者,您可以只使用CORS中间件。

您是否已经查看了用于express:的CORS包,这允许您将正则表达式用于源代码:

var express = require('express');
var cors = require('cors');
var app = express();

var corsOptions = {
  origin: /example\.com$/,
  methods: "GET,HEAD,PUT,PATCH,POST,DELETE"
};

app.use(cors(corsOptions));
您还可以在各个端点上使用此包,例如

app.get('/test/', cors(corsOptions), function (req, res, next) {
    res.json({msg: 'Success'});
});

是的。在我读到的一篇文章(或另一个StackOverflow答案)中,它说如果我按照代码片段中的方式做,我就不需要使用它。这就是为什么我没有用那个。我猜我错了。我希望这能让你走得更远一点!我认为应该改为
req.get(“origin”)
,至少对于express/connect服务器是这样。