问题场景
前端联调后端接口时,浏览器控制台的network中显示接口status为“CORS error”
解决方案一 CORS依赖包
- 项目安装依赖,项目终端中输入
npm i cors
- 项目中使用依赖,在项目下app.js文件里添加如下代码
let app = express();
const cors = require('cors');
//设置跨域访问
app.use(cors()) // 挂载到app服务上
解决方案二 response响应头处理(特殊情况下可行)
1.项目中响应头里设置,在项目的app.js文件中添加如下代码
let app = express();
//设置跨域访问
app.all('*',function(req,res,next) {
res.header("Access-Control-Allow-Origin","*");
res.header('Access-Control-Allow-Methods','PUT,GET,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers","X-Requested-With");
res.header("Access-Control-Allow-Credentials", true);
res.header("Content-Type", "application/json;charset=utf-8")
next();
});
重点:res.header("Access-Control-Allow-Credentials", true); 该设置主要是请求时允许发送cookie(目测之前项目没有设置此请求头,故导致跨域无效,大家可添加这个试试看).
其他情况:
- 也有博客提到“Access-Control-Allow-Credentials设置为true, Access-Control-Allow-Origin属性值需要明确域名,不能为‘*’”,但是我设置为‘ * ’不受影响。
- 网上也有说让前端处理,在发送xhr请求时可设置“xhr.withCredentials = true;”(各封装也有对应配置)。 也是请求时携带cookie. 但我尝试却仍会出现跨域问题(咱也不清楚什么情况)。
- 本地运行环境vue/cli中配置devServer代理一个本地服务器,则不会出现跨域问题(跨域是浏览器的一种安全策略即,跨域问题存在于浏览器与服务器之间,不存在于服务器与服务器之间)。
这也是自己目前仅想到两种处理方案,可能有些不严谨的地方也请大家包涵。不过同时也虚心接受大伙的批评和指正。
--前小白,嘎油