使用 Angular Web 应用程序调用 mongo/golang db 时被 CORS 策略错误阻止

2024-02-03

我正在制作一个前端带有 Angular 的 Web 应用程序,后端带有 golang 和 mongo 的数据库。 我已经启动并运行了数据库,并且所有路由请求都已经过测试并且正在 Postman 上运行。 但是,当我尝试对 Angular 应用程序的服务发出 DELETE 请求或 PUT 请求时,出现以下错误:

“从 origin '-my api url-' 访问 XMLHttpRequesthttp://本地主机:4200 http://localhost:4200'已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。”

我可以发出 GET 和 POST 请求,但不能发出 DELETE 或 PUT 请求。

我该如何解决这个问题?这是前端问题还是后端问题?任何帮助将不胜感激。谢谢。

PS:我正在使用 mongoHandlers。

这是我在前端的服务:

deleteShow(showId: string) {
    let headers = new HttpHeaders();
    headers.append("Content-Type", "application/json");
    return this.http
      .delete<Show>(`${environment.apiBase}/shows/${showId}`, {
        headers
      })
      .pipe(catchError(this.handleError));
  }

后端代码:

Route:

func RouteShows(r *mux.Router, shows handlers.ShowHandler) {

    sub := r.PathPrefix("/api/shows").Subrouter()

    sub.HandleFunc("", getShows(shows)).Methods(http.MethodGet)
    sub.HandleFunc("/{id}", getShowById(shows)).Methods(http.MethodGet)
    sub.HandleFunc("/{id}", updateShow(shows)).Methods(http.MethodPut)
    sub.HandleFunc("", createShow(shows)).Methods(http.MethodPost)
    sub.HandleFunc("/{id}", deleteShow(shows)).Methods(http.MethodDelete)
    sub.HandleFunc("/status/{status}", getShowsByStatus(shows)).Methods(http.MethodGet)
}

API功能:

func deleteShow(s handlers.ShowHandler) http.HandlerFunc {

    return func(w http.ResponseWriter, r *http.Request) {

        params := mux.Vars(r)
        var show models.Show

        if _, ok := params["id"]; !ok {
            responses.BadRequestWrapped(w, errors.New("param not found: id"))
            return
        }

        err := s.DeleteShow(params["id"])
        if err != nil {
            responses.InternalServerErrorWrapped(w, errors.FromError(err)) //TODO
            return
        }

        responses.OK(w, show)
    }

}

MongoHandler接口:

//ShowHandler handles the interface of mongo func
type ShowHandler interface {
    SearchShows(values map[string][]string, pagination *models.Pagination) ([]*models.Show, error)
    GetShows() ([]*models.Show, error)
    GetShowById(id string) (*models.Show, error)
    //GetAppointmentsCreatedByUser(username string) ([]*models.Appointment, error)
    GetShowsByStatus(status string) ([]*models.Show, error)

    CreateShow(show *models.Show) error
    UpdateShow(show *models.Show) error
    DeleteShow(id string) error
}

蒙戈处理程序:

//deleteShow removes a show based on Show ID from DB
func (s *shows) DeleteShow(id string) error {

    if _, err := s.mongo.DeleteOne(db_qcq, collection_shows, ValueEquals("_id", id)); err != nil {
        return err
    }

    return nil
}

希望这足以提供观点。


我认为问题不在角度方面,看起来 NodeJs 服务器正在阻止 DELETE 请求。您需要在节点服务器上允许此请求类型。

注意 - CORS:跨源资源共享,这意味着您需要告诉服务器哪些是有效来源,以及哪些是请求时允许的有效 Http 方法类型。 (我添加了*,这意味着允许所有来源)

您可以使用下面的代码(如果使用快递)

// Initialize express middleware 
const express = require('express');
const app = express();

// Enable CORS
app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT,DELETE");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    next();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Angular Web 应用程序调用 mongo/golang db 时被 CORS 策略错误阻止 的相关文章

  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 有角。 [HMR] 无法应用更新。需要完全重新加载

    我添加 HMR 故事配置 hmr https github com angular angular cli wiki stories configure hmr 到我的 Angular 项目 但不是热重新加载 而是完全重新加载 更新到Ang
  • mongoengine 操作的原子性如何

    我正在尝试在对象的状态之间转换 如下所示 User objects id user id state STATE WAITING update one set state STATE FINISHED The question是 是否存在这
  • 如何在 Go 中使用与包同名的变量名?

    文件或目录的常见变量名称是 path 不幸的是 这也是 Go 中包的名称 此外 在 DoIt 中更改路径作为参数名称 如何编译此代码 package main import path os func main DoIt file txt f
  • 阻止 Mongoose 为子文档数组项创建 _id 属性

    如果您有子文档数组 Mongoose 会自动为每个子文档创建 id 例子 id mainId subDocArray id unwantedId field value id unwantedId field value 有没有办法告诉 M
  • MongoDB 如何选择候选计划

    我的应用程序中的查询速度很慢 创建两个索引后 它在本地数据库中使用它们以获得更好的性能 但是当我部署在生产数据库上时 它仍然使用原始索引 下面是我所做的 集合中的属性tasks team id project id created by a
  • 对自定义打字稿错误实例实施instanceof检查?

    打字稿有这个instanceof 检查自定义错误 https github com Microsoft TypeScript issues 13965问题 但尚不清楚我们需要做什么才能得到instanceof在职的 例如对于这个异常我们如何
  • 角度材质自动完成力选择

    在我的 Angular 5 应用程序中 我有一些 matAutocomplete 但我想强制选择其中一个建议 所以我遵循这种方法 堆栈闪电战 https stackblitz com edit autocomplete force sele
  • 如何在全局配置文件中配置 ngx-logger 的记录器级别

    我最近包括了ngx logger对于我在应用程序中实现记录器级别的项目 我已将记录器级别硬编码为app module ts在配置内ngx logger但我需要在一些全局配置文件中实现这一点 我遵循了教程here https medium c
  • MongoDB 嵌套数组查询

    我问这个作为评论another https stackoverflow com questions 5250652 query a nested array in mongodb问题 还发了一个question https groups g
  • Angular AWS Amplify 验证器额外字段

    我正在尝试将 AWS Amplify 与 Angular 结合使用 通过 Cognito 进行身份验证 我面临的问题是 当我调用该组件时
  • 相同的单词但不同的 unicode 字符

    我在 Windows 上使用 Python 构建了一个关于越南餐馆的问答应用程序 要编写越南语字符 我需要使用 Unicode 首先 我从使用 HTML charset utf 8 的 TripAdvisor 网站克隆数据并构建我的 Mon
  • $unwind聚合框架中的对象

    在 MongoDB 聚合框架中 我希望在对象 即 JSON 集合 上使用 unwind 运算符 看起来不像是这样possible http docs mongodb org manual reference aggregation S un
  • 在 angular2 视图模板中传递枚举

    我们可以在 angular2 视图模板中使用枚举吗 div class Dropdown div 传递字符串作为输入 enum DropdownType instrument account currency Component selec
  • 我的 Angular 7 应用程序 sitemap.xml 没有被网站管理员工具拾取

    我的 Angular 7 应用程序 sitemap xml 没有被网站管理员工具拾取 我有这个 sitemap xml 文件 我隐藏了真实姓名
  • 未捕获错误:无法使用 angular2-meteor 和 ng-bootstrap 解析 NgbAlert 的所有参数

    我正在使用 Angular 作为前端运行一个流星项目 我似乎无法弄清楚如何让 ng bootstrap ng bootstrap 正确导入到我的项目中 这是我的设置 Meteor 版本 1 6 Angular 版本 5 1 3 ng boo
  • Angular 5 表单验证(必需)不起作用

    我正在使用 TypeScript 学习 Angular 5 我对此完全陌生 我现在正在尝试构建一个表单并验证它 但它无法正常工作 这是我的组件 Component selector app login templateUrl login c
  • Java 驱动程序相当于 JavaScript shell 的 Object.bsonsize( doc )?

    我想知道 Java 驱动程序相当于 Mongo JavaScript shell 的 Object bsonsize doc 方法 例如 执行以下操作的 Java 代码是什么 bobk mbp bobk mongo MongoDB shel
  • Angular 2在两个组件之间传递数据

    我想在两个组件之间传递数据 但我的问题是 我有两个组件 假设一个是 主 另一个是 模态对话框 在我的主要部分中 我想打开模态对话框并从模态对话框中获取数据 而无需离开我的主要组件 我知道如何使用 Input 但我看不到在我的应用程序中使用它

随机推荐

  • 运行 R 脚本 - Ubuntu 服务器

    我最近在 Ubuntu Server 16 04 上编译了 R 我尝试使用 Rscript 函数运行 R 脚本 但遇到错误 当我使用运行脚本时Rscript 输出显示功能as and new 无法找到 R 发行版中包含的方法包中的内容 当我
  • HTML5 必需属性不起作用

    我想创建一个电子邮件联系表单而不刷新页面 所以我在我的 html 文件中添加了 jquery 我使用 html required 属性检查字段是否为空 但是当我在我的 html 代码中添加 jquery 代码时 required 属性不起作
  • 使用未指定的索引。考虑添加 ".indexOn": "g"

    我正在使用 Geofire 在某个区域进行循环查询 设置好观察者后 我会返回位置 但是 随着位置的变化 我还会返回 使用未指定的索引 考虑添加 indexOn g 我的 geofire 数据库看起来像这样 karmadots geofire
  • 将正方形分割成小正方形

    我有一个大广场 我想把这个正方形分成小正方形 我需要所有可能的组合 我知道组合有无数种 但我有一个限制 我有最小正方形的固定尺寸 我可以使用蛮力来实现它 但它太长了 对于这个任务有更好的算法吗 Thanks 那么这个问题只有当我们做出两个假
  • 尝试理解 Ruby 中 self.method_name 与 Classname.method_name 的使用

    我试图了解何时使用 self method name 与何时使用 Classname method name 在下面的示例中 为什么 before create 需要引用 User hash password 而不是 self hash p
  • Apache:如何对用户隐藏服务器版本和操作系统?

    我在一个网站上读到我需要添加两行httpd conf file 服务器签名关闭 ServerTokens 产品 但当我添加它们后 一切都没有改变 正如之前我可以在浏览器中看到的 Apache 2 2 16 Debian 也许这很重要 当我打
  • 默认的 VB6 字符集是什么?

    我们有一个用 Java 编写的应用程序 它读取 VB6 应用程序生成的一些文本 问题是 这个 VB6 应用程序使用一些特殊字符生成此输出 例如 我们不知道这些字符采用什么字符集 那么问题来了 VB6有没有使用默认的字符集 是哪一个 如何将数
  • 如何通过新的 V2 API 使用 Google Translate TTS?

    我曾经使用以下网址调用 Google Translate TTS 下载音频文件 然而谷歌改变了工作方式 因此我无法再下载音频文件 我已注册 Google Translate API V2 免费试用版 但找不到如何获取 TTS 音频文件 任何
  • Android 4.0.3 (MIUI ROM) 下未加载本机库

    一位客户联系我 当他将 Android ROM 更新到相当于 Android 4 0 3 的 MIUI 时 我的 Android 应用程序崩溃了 LogCat 中的相关行是 04 09 10 37 09 326 17789 17789 E
  • 在 OS X Lion 10.7.4 和 Python 3.2.2 上安装 MatPlotLib 1.2.x

    几天前我问了一个关于在同一系统上安装 numpy 的问题 值得庆幸的是 我自己设法解决了这个问题 但不幸的是我现在陷入了尝试安装 matplotlib 的困境 我首先尝试了当前的分布式版本 但没有成功 所以我想我应该下载 git 存储库并尝
  • 函数模板重载解析和编译器优化

    我正在看这里发现的这个问题包含类型的类型的模板函数重载 https stackoverflow com questions 44511121 template function overload for type containing a
  • 将数据存储为 flutter 中共享首选项中的对象

    我想在共享首选项中存储一个对象 其中包含一些字段 如姓名 年龄 电话号码等 我不知道如何在颤振中的共享首选项中存储对象 您可以将对象存储在共享首选项中 如下所示 SharedPreferences shared User await Sha
  • 使用 EDITBIN 时的错误代码 -1073741515

    我正在使用 EditBin 来增加我正在编写的应用程序的堆栈大小 我在 Visual Studio 的构建后事件命令行中包含以下内容 C Program Files x86 Microsoft Visual Studio 10 0 VC b
  • 如何使我的网站符合 PCI 标准

    假设我决定使用支付网关而不是使用他们的托管页面 而是提供我自己的信用卡详细信息表单 然后通过 xml 将数据发送到他们的后端 如下所示本页有解释 http www eway com au Developer eway api hosted
  • Java内存模型:编译器重新排列代码行

    众所周知 Java 语言允许编译器重新排列已编译代码行 只要重新排序对代码语义没有影响即可 然而 编译器只需关心语义 如从当前线程 如果这种重新排序影响多线程情况下的语义 通常会导致并发问题 内存可见性 我的问题 通过允许编译器使用这个 f
  • 如何使用 matplotlib 在圆环饼图中制作子图?

    如何使用Python的matplotlib为圆环饼图制作子图 下面是我写的代码 import matplotlib pyplot as plt labels Frogs Hogs Dogs sizes 15 30 45 colors yel
  • 如何将 Dart Html 客户端 Web 套接字响应从 Blob 转换为 Uint8List?

    我已经实现了自己的二进制消息协议 用于从 Dart 客户端到 Java 服务器的简单请求 响应对象 它们在 Dart 中编码为 Uint8List 在远程服务器上以 Java 编码为 ByteBuffer 往返适用于 dart io 中的
  • 将空格分隔的文件转换为 CSV

    我有一个包含表格数据的文本文件 我需要做的是自动执行写入以逗号分隔而不是空格分隔的新文本文件的任务 从现有数据中提取几列 对列重新排序 这是原始数据前 4 行的片段 Number of rows 8542 Algorithm Date Ti
  • dplyr 掩盖 GGally 并破坏 ggparcoord

    鉴于新的会议 执行一个小ggparcoord 函数文档中提供的示例 library GGally data diamonds package ggplot2 diamonds samp lt diamonds sample 1 dim di
  • 使用 Angular Web 应用程序调用 mongo/golang db 时被 CORS 策略错误阻止

    我正在制作一个前端带有 Angular 的 Web 应用程序 后端带有 golang 和 mongo 的数据库 我已经启动并运行了数据库 并且所有路由请求都已经过测试并且正在 Postman 上运行 但是 当我尝试对 Angular 应用程