Angular : 使用 $resource 拦截特定请求
Angular : intercept specific request with $resource
我是 Angular 的新手,正在研究拦截器。我创建了一个 angular 工厂来从 API 中获取一些数据,就像这样:
app.factory('Connection',['$resource',function($resource) {
return $resource('url',{param1: '1',param2: '55'},);
}]);
我还创建了看起来像这样的拦截器:
app.factory('connectionInterceptor', function($q,$location) {
var connectionInterceptor = {
response: // code here
responseError: // code here
};
return connectionInterceptor;
});
拦截器运行良好。但它会拦截我所做的每个 http 请求,我想让它对特定的 $resource 起作用。我在 angular $resource 文档中读到,有一种方法可以通过向 $resource 添加拦截器 action/param 来实现。所以我试过了:
app.factory('Connection',['$resource',function($resource) {
return $resource('http://localhost:8080/api/login',{user: '1',password: '55'}, {},
query: {
method : 'GET',
interceptor : 'connectionInterceptor'
}
});
}]);
没用。抛出的错误是:Error in resource configuration for action query. Expected response to contain an object but got an array
.
我错过了什么?
正如你所说,拦截器是全局设置的。我必须在我的回复中添加一个测试来检查 $resource URL 并添加一些特定的处理。
module.factory('interceptor', function() {
var interceptor = {
response: function(response) {
if (response.config.url.startsWith('my url')) {
// some treatment
}
else
// other treatment
return response;
}
return connectionInterceptor;
});
我是 Angular 的新手,正在研究拦截器。我创建了一个 angular 工厂来从 API 中获取一些数据,就像这样:
app.factory('Connection',['$resource',function($resource) {
return $resource('url',{param1: '1',param2: '55'},);
}]);
我还创建了看起来像这样的拦截器:
app.factory('connectionInterceptor', function($q,$location) {
var connectionInterceptor = {
response: // code here
responseError: // code here
};
return connectionInterceptor;
});
拦截器运行良好。但它会拦截我所做的每个 http 请求,我想让它对特定的 $resource 起作用。我在 angular $resource 文档中读到,有一种方法可以通过向 $resource 添加拦截器 action/param 来实现。所以我试过了:
app.factory('Connection',['$resource',function($resource) {
return $resource('http://localhost:8080/api/login',{user: '1',password: '55'}, {},
query: {
method : 'GET',
interceptor : 'connectionInterceptor'
}
});
}]);
没用。抛出的错误是:Error in resource configuration for action query. Expected response to contain an object but got an array
.
我错过了什么?
正如你所说,拦截器是全局设置的。我必须在我的回复中添加一个测试来检查 $resource URL 并添加一些特定的处理。
module.factory('interceptor', function() {
var interceptor = {
response: function(response) {
if (response.config.url.startsWith('my url')) {
// some treatment
}
else
// other treatment
return response;
}
return connectionInterceptor;
});