文章目录

Access-Control-Allow-Origin只允许一个值不允许多个值,我们会很自然的理解为多个域添加逗号,但是的确不行,该属性的值只允许一个值。
解决方案:
判断当前请求的host,是否在允许列表如果在允许列表,则设置Access-Control-Allow-Origin属性为该请求的host即可。详细代码入下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//设置允许跨域访问
app.all('/api/*', function(req, res, next) {
//把允许的域都写在allows数组里即可
var allows = ["http://openks.oschina.io", "http://www.zhuyangxing.cn"];
//线上环境使用线上地址,线下环境使用线下地址。也可把所有地址写在允许的数组里不用判断线上和线下环境
if (process.env.SERVER_SOFTWARE != undefined && process.env.SERVER_SOFTWARE.indexOf("bae") > -1) {
if (allows.indexOf(req.headers.origin) > -1) {
res.header("Access-Control-Allow-Origin", req.headers.origin);
}
} else {
res.header("Access-Control-Allow-Origin", "http://10.10.11.222");
}
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("Content-Type", "application/json;charset=utf-8");
next();
});

当然也可以使用npm上已经存在的插件cors 关于 cors更多信息在这里

文章目录