express处理为浏览器处理跨域

387 阅读2分钟

问题场景

前端联调后端接口时,浏览器控制台的network中显示接口status为“CORS error

接口跨域显示图.png

解决方案一 CORS依赖包

  1. 项目安装依赖,项目终端中输入

npm i cors

  1. 项目中使用依赖,在项目下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(目测之前项目没有设置此请求头,故导致跨域无效,大家可添加这个试试看).

其他情况:

  1. 也有博客提到“Access-Control-Allow-Credentials设置为true, Access-Control-Allow-Origin属性值需要明确域名,不能为‘*’”,但是我设置为‘ * ’不受影响。
  2. 网上也有说让前端处理,在发送xhr请求时可设置“xhr.withCredentials = true;”(各封装也有对应配置)。 也是请求时携带cookie. 但我尝试却仍会出现跨域问题(咱也不清楚什么情况)。
  3. 本地运行环境vue/cli中配置devServer代理一个本地服务器,则不会出现跨域问题(跨域是浏览器的一种安全策略即,跨域问题存在于浏览器与服务器之间,不存在于服务器与服务器之间)。

这也是自己目前仅想到两种处理方案,可能有些不严谨的地方也请大家包涵。不过同时也虚心接受大伙的批评和指正。

                                                                            --前小白,嘎油