方法一:
在使用获取request前/使用路由器前引入
app.all('*', function (req, res, next){
res.header("Access-Control-Allow-Origin", "*");// http://www.yueyanshaosun.cn,http://www.baidu.com,www,...
res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Credentials", true);
res.header("X-Powered-By", ' 3.2.1');
// if (req.method == "OPTIONS") res.send(200);/*让options请求快速返回*/
// else next();
next();
});
方法二:引入cors依赖 npm install cors --save 可参见:https://www.npmjs.com/package/cors
var cors =require("cors");
//对所有路由启用cors
app.use(cors());
//可以向cors()中添加参数;设置可访问的域名,下面的部分跨域路由也可以这样;
var corsOptions = {
origin: 'http://example.com',//支持回调函数,以配置多域名
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
//如果多域名:
var whitelist = ['http://example1.com', 'http://example2.com'];
var corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
//对某个路由启用:在相应的路由中加入
routers.post("/test",cors(),function (request,response) {
response.send("想跨域访问?")
});
需要注意的redirect是get请求,若果前台页面post过来并redirect了,会报错;
为此 我们最好将能跨域的路由单独抽离出来如
/* 登录判断 */
app.use(function (request,response,next) {
//登陆和跨域访问直接可以继续匹配
if(request.url=='/routers/load/login'||request.url=='/routers/load/doLogin'||request.url=='/routers/load/regist'||request.url=='/routers/load/doRegist'||request.url.indexOf('/routers/cors/')!=-1){
next();
}else{
//其他页面访问需要session,如果没有的话,就去登陆页面;
if(request.session.username&&request.session.username!=''){
next();
}else{
response.redirect("/routers/load/login");// xx.js/xx.js/方法
// redirect都是get的方式请求,对于post跨域请求重定向会报错.
}
}
});
可参见 跃焱邵隼nodeJs