【问题标题】:How to fix XMLHttpRequest has been blocked by CORS policy如何修复 XMLHttpRequest 已被 CORS 策略阻止
【发布时间】:2019-10-31 19:09:46
【问题描述】:

当我使用 NodeJS 服务器 REST API 时,我在 Angular 登录组件中遇到问题 连接数据库(MongoDB)

从源访问“http://localhost:3000/users/login”处的 XMLHttpRequest >“http://localhost:4200”已被 CORS 策略阻止:响应中 >“Access-Control-Allow-Credentials”标头的值为“Content-Type” ' >当请求的凭证模式为 'include' 时必须为 'true'。 XMLHttpRequest 发起的请求的 >credentials 模式由 >withCredentials 属性控制。

这是我在 nodejs 文件 (app.js) 中的代码

var cors = require ('cors');
app.use(cors({
    origin:['http://localhost:4200','http://127.0.0.1:4200'],
    credentials:true
}));

app.use(function (req, res, next) {

  res.header('Access-Control-Allow-Origin', "http://localhost:4200");
  res.header('Access-Control-Allow-Headers', true);
  res.header('Access-Control-Allow-Credentials', 'Content-Type');
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  next();
});

这里是 git 日志结果: https://prnt.sc/o38w12 此外,我提交时注册功能仍然有效

【问题讨论】:

    标签: node.js angular cors


    【解决方案1】:

    credentials:配置 Access-Control-Allow-Credentials CORS 标头。设置为 true 以传递标头,否则省略。不是内容类型

    你可以尝试改变吗

    res.header('Access-Control-Allow-Credentials', 'Content-Type');
    

    res.header('Access-Control-Allow-Credentials', true);
    

    【讨论】:

      【解决方案2】:

      **

      • 修复 CORS 错误

      ** 有两种方法:-

      1. 如果您拥有后端服务器,最好配置 后端服务器返回适当的 CORS HTTP 标头配置

      2. Angular CLI 代理,这是我们本文的重点。

      **

      • Angular CLI 代理

      **

      在这里,我假设您有一个 Angular 项目,其中一些服务发出 HTTP 请求。 在 src 文件夹的根目录下创建名为 proxy.conf.json 的代理配置文件

                      "/api": {
                          "target": "http://localhost:3000",
                          "secure": false
                      }
                  }
      
      1. 使用架构师下的 proxyConfig 键配置 angular.json>serve>指向 src/proxy.conf.json 的选项,如下所示
                 "architect": {
                      "serve": {
                        "builder": "@angular-devkit/build-angular:dev-server",
                        "options": {
                          "browserTarget": "your-application-name:build",
                          "proxyConfig": "src/proxy.conf.json"
                        },
      

      **

      • 现在,只需运行 ng serve 即可完成。

      ** 仅供参考:您也可以将此技巧作为一种安全措施来隐藏您发出的服务器请求,使其不显示在浏览器中。

      【讨论】:

        猜你喜欢
        • 2021-09-05
        • 2021-10-27
        • 2018-02-26
        • 2021-04-24
        • 2019-12-18
        • 2019-04-28
        • 2020-01-18
        • 2020-05-30
        • 2021-10-05
        相关资源
        最近更新 更多