gpt4 book ai didi

angularjs - 如何拦截$resource请求

转载 作者:行者123 更新时间:2023-12-02 15:33:16 29 4
gpt4 key购买 nike

是否有办法拦截 $resource 调用中的请求?

我想向其中添加 OAUTHv2 header ,而不是为每个资源模型指定此 header 。

目前我只能拦截响应,如文档中所述:

...

interceptor - {Object=} - The interceptor object has two optional methods - response and responseError. Both response and responseError interceptors get called with http response object. See $http interceptors.

我知道您可以在 $http 上推送全局拦截器,但我不想在 API 调用之外的任何请求中包含我的 Bearer token (安全性...)

任何使用 OAUTHv2 的人都一定遇到过这个问题。遗憾的是 Angular.JS 中没有标准方法......

最佳答案

虽然不是很明显,但有一种方法可以拦截 $resource 请求。

这是一个例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Intercept resource request</title>
  <style type="text/css">.ng-cloak { display: none; }</style>
  <script src="angular.js"></script>
  <script src="angular-resource.js"></script>
  <script>
angular.module("app", ["ngResource"]).
  factory(
    "services",
    ["$resource", function ($resource)
    {
      return $resource(
"http://md5.jsontest.com/",
        {},
{
          MD5:
{
method: "GET",
params: { text: null },
then: function(resolve)
{
this.params.text = "***" + this.params.text + "***";
this.then = null;
resolve(this);
}
}
});
}]).
  controller(
    "Test",
    ["services", function (services)
    {
      this.value = "Sample text";

      this.call = function()
      {
        this.result = services.MD5({ text: this.value });
      }
    }]);
  </script>
</head>
<body ng-app="app" ng-controller="Test as test">
  <label>Text: <input type="text" ng-model="test.value" /></label>
  <input type="button" value="call" ng-click="test.call()"/>
  <div ng-bind="test.result.md5"></div>
</body>
</html>

它是如何工作的:

  1. $resource 合并操作定义、请求参数和数据,为 $http 请求构建配置参数。
  2. 传递到 $http 请求中的配置参数被视为类似 Promise 的对象,因此它可能包含用于初始化配置的 then 函数。
  3. Action 的 then 函数可以根据需要转换请求。

演示可以在 transform-request.html 找到

Elsewhere我已经展示了用于取消 $resource 请求的类似方法。

另请参阅:Intercept angularjs resource request

关于angularjs - 如何拦截$resource请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082468/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com