当前位置: 首页 > 知识库问答 >
问题:

Angular http to Wiremock stub does选项,而不是使用200删除->页面继续被拒绝

楮阳
2023-03-14

我有一个带有WireMock存根的AngularJS应用程序。有一个按钮使用以下代码调用方法/api/deleteThis:

onDeleteButtonClick() {
    this._deleteThis()
      .then(() => {
          this._setState(States.SUCCESS);
      })
      .catch(() => {
        this._setState(States.FAIL);
      });
  }

  private _deleteThis() {
    return this.$http.delete('http://localhost:8080/api/deleteThis');
  }

我的WireMock文件:

{
  "request" : {
    "urlPattern" : "/api/deleteThis",
    "method" : "DELETE"
  },
  "response" : {
    "status" : 200,
    "body" : "{}",
    "headers" : {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin" : "*",
      "Access-Control-Allow-Methods" : "*",
      "Access-Control-Allow-Headers": "Content-Type"
    }
  }
}

而且

{
  "request" : {
    "urlPattern" : "/api/deleteThis",
    "method" : "OPTIONS"
  },
  "response": {
    "status": 200,
    "headers": {
      "Access-Control-Allow-Origin" : "*",
      "Access-Control-Allow-Methods" : "POST, GET, OPTIONS, DELETE, PUT, PATCH",
      "Access-Control-Allow-Headers": "Content-Type"
    }
  }
}

我期望的是:当函数激活时,它应该调用Mock并收到一个200。因此,各州应该走向成功。但相反,各州注定要失败。浏览器(firefox)网络选项卡显示已拨打200个电话,但这是一个选项,而不是删除。

我读过很多与CORS有关的类似问题。我理解为什么会进行选项调用,但我不理解为什么该方法在收到200(即使是另一种类型)时选择进入onRejected。

提前感谢您抽出时间。

共有2个答案

韩彬
2023-03-14

也许你解决了这个问题,但我为其他人负责。

当您从角发送请求并且它与“GET”不同时,角发送两个请求(CORS策略):

  • 首先,它发送一个选项,检查是否允许“删除”操作(或其他操作)
  • 如果此请求收到带有适当标题的200,Angular将发送删除请求

因此,您需要在wiremock中创建两个存根:

{
  "request" : {
    "urlPattern" : "/api/deleteThis",
    "method" : "OPTIONS"
  },
  "response" : {
    "status" : 200,
    "body" : "{}",
    "headers" : {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin" : "*",
      "Access-Control-Allow-Methods" : "*",
      "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Toke"
    }
  }
}

{
  "request" : {
    "urlPattern" : "/api/deleteThis",
    "method" : "DELETE"
  },
  "response" : {
    "status" : 200,
    "body" : "{}",
    "headers" : {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin" : "*",
      "Access-Control-Allow-Headers": "Content-Type"
    }
  }
}

当做

郗丰
2023-03-14

要获取更多信息,请记录错误响应:

onDeleteButtonClick() {
    this._deleteThis()
      .then(() => {
          this._setState(States.SUCCESS);
      })
      .catch((error) => {
        console.log(error);
        this._setState(States.FAIL);
      });
  }
 类似资料:
  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 我想使用页面而不是使用页面。但是当使用html页面时,我得到了错误。但是如果我使用jsp页面,我没有得到任何错误。 当我使用

  • 问题内容: 我是AngularJS的新手。我进行了很多搜索,但是并不能解决我的问题。 我第一次在选择框中得到一个空白选项。 这是我的HTML代码 JS 但这似乎不起作用。我该如何解决?这是JSFiddle演示 问题答案: 当传递给的一组选项中不存在被引用的值时,将生成空值。这样做是为了防止意外选择模型:AngularJS可以看到初始模型是未定义的还是未在选项集中,并且不想自行决定模型的值。 简而言

  • 问题内容: max@serv$ whoami max max@serv$ ls -la ./defines.php -rwxrwxrwx 1 max max 1985 2011-11-16 02:01 ./defines.php max@serv$ chmod 0777 ./defines.php max@serv$ rm ./defines.php rm: cannot remove `./de

  • 我正在寻找某种方法,使一些@BeforeMethod逻辑只为一组java单元测试执行(使用testng)。因此,我继续了testng文档,发现了以下内容:

  • 我正在使用以下访问被拒绝页面的配置 然后映射/不访问控制器。但当我尝试访问我无权访问的资源时,我会得到一个错误页面 浏览器中的HTTP状态404-/mycontext/noAccess 虽然当我键入整个urlhttp://abc.mycompany:8080/mycontext/noAccess我可以看到错误页面。知道为什么Spring不重定向到控制器吗?