nodejs+express解决跨域问题,发现网上的大部分都是误导人,花了不少时间,终于弄懂了
我在vue+nodejs+express+mysql的项目里面,发现本地用vue代理正常调用远程的nodejs api接口,但是放在云服务器上之后,就出现了跨域问题,因为vue代理在线上已经无效了。
方法一:
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow-Origin", req.headers.origin); // 为了安全,可指定域名白名单,此处为所有域名都可访问,配置多个域名白名单不可直接写数组,要判断条件后赋值单个域名
res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,token");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
next();
});
res.header("Access-Control-Allow-Origin", " * ");,这个就会报以下的错误:
image.pngres.header("Access-Control-Allow-Credentials", "true");,如果没有这段代码,解决跨域就无效,一定要加上,注意true是字符串:
image.pngres.header("Access-Control-Allow-Headers", "Content-Type,username");,这是req.headers的字段,比如username,一般后台系统需要在headers里加token验证
image.png
方法二:
const cors = require('cors');
// origin 可配置多个域名白名单(数组),也可配置一项域名(字符串)
app.use(cors({credentials: true, origin: ['http://www.baidu.com','http://www.baidu.com'],headers:'X-Requested-With,Content-Type,username',methods:'PUT,POST,GET,DELETE,OPTIONS'}));
网友评论