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服务器是这样。