是否有办法拦截$ resource调用中的请求?
我想为其添加一个OAUTHv2标头,而不是为每个资源模型指定它。
目前我只能拦截响应,如文档中所述:
...
interceptor - {Object =} - 拦截器对象有两个可选项 方法 - 响应和响应错误。响应和responseError都有 使用http响应对象调用拦截器。见$ http 拦截器。
我知道你可以在$ http上推送全局拦截器,但我不想在API调用之外的任何请求中包含我的Bearer令牌(安全性......)
任何正在做OAUTHv2的人都必须遇到这个问题。可惜在Angular.JS中没有标准的方法......
答案 0 :(得分:4)
虽然,这并不明显,但有一种方法可以拦截$资源请求。
以下是一个例子:
<!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>
Elsewhere我已经展示过用于取消$资源请求的类似方法。
答案 1 :(得分:-1)
您可以使用$http
拦截器
您可以在$resource
方法
关于此的文章:http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/