Node.js EXPRESS和CORS存在问题-访问控制允许原始
当我将一个url传递给我的Cors选项时,我的API将使用以下url返回Access Control Allow Origin:Node.js EXPRESS和CORS存在问题-访问控制允许原始,node.js,express,cors,Node.js,Express,Cors,当我将一个url传递给我的Cors选项时,我的API将使用以下url返回Access Control Allow Origin: app.use(cors({ origin: 'https://fakeUrl.net/', optionsSuccessStatus: 200, })); 但当我传递列表时,express不会返回标题: var allowedOrigins = ['https://fakeUrl.net','https://fakeUrl2.net/']; a
app.use(cors({
origin: 'https://fakeUrl.net/',
optionsSuccessStatus: 200,
}));
但当我传递列表时,express不会返回标题:
var allowedOrigins = ['https://fakeUrl.net','https://fakeUrl2.net/'];
app.use(cors({
origin: function(origin: any, callback: any){
if(!origin){
console.log('Cors indefinido: ' + origin);
return callback(null, true);
}
if(allowedOrigins.indexOf(origin) === -1){
console.log('Cors fora da lista: ' + origin);
var msg = 'The CORS policy for this site does not ' +
'allow access from the specified Origin. Return 12221511';
return callback(new Error(msg), false);
}
console.log('Cors dentro da lista: ' + origin);
return callback(null, true);
},
optionsSuccessStatus: 200,
}));
或者像这样:
app.use(cors({
origin: ['https://fakeUrl.net','https://fakeUrl2.net/'],
optionsSuccessStatus: 200,
}));
只是不工作
我相信这在Express中是一个问题,我已经在github上为车队开了一张票,但现在已经关闭了
任何人都可以解决这个问题?您可以使用一个函数来定制cors,而不是将其作为一种方法传递:
const whitelist = ['http://something.com', 'http://example.com'];
const corsOptionsCheck = (req, callback) => {
let corsOptions;
let isDomainAllowed = whitelist.indexOf(req.header('Origin')) !== -1;
if (isDomainAllowed) {
// Enable CORS for this request
corsOptions = { origin: true }
} else {
// Disable CORS for this request
corsOptions = { origin: false }
}
callback(null, corsOptions)
}
app.use(cors(corsOptionsCheck));
不幸的是,我需要强制报头:
var allowedOrigins = ['https://fakeUrl.net','https://fakeUrl2.net/'];
let origin = (req.headers.origin != undefined && req.headers.origin.length > 0)? (req.headers.origin ?? "") : (req.headers.host ?? "");
let theOrigin = "";
ALLOWED_ORIGINS.forEach(element => {
if(element.toLowerCase().includes(origin?.toLowerCase() ?? ""))theOrigin = element;
});
if(!theOrigin && theOrigin.length > 0){
res.header("Access-Control-Allow-Origin", theOrigin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
}
我尝试了许多我发现的示例,但没有一个能够完美工作。我需要一个返回头访问控制Allow Origin。验证正常。如果源标头包含白名单数组中存在的任何域,则此代码将允许CORS。您可以检查响应标头访问控制允许来源。有关更多详细信息,您可以在此处查看其工作原理:“但当我传递列表时,express不会返回标题”-它会做什么?这里有很多日志语句,但没有告诉我们它们的输出。