angular.js - angularjs ngResource 如何设置所有请求的header?

浏览:40日期:2023-01-17

问题描述

我想在每个请求中都会提交一个header,类似于 a: bbb 这样的内容.

// 无论是获取列表 $scope.books = myRes.query(); // 还是单独的一个项目 $scope.oneBook = myRes.get({id:2});

能在所有的RESTful这样的请求中加入一个header,header的内容是

ca-g-oo: data-dnwaec2ioagwqevnm

尝试了各种方式都无法实现

$resource(url, [paramDefaults], [actions]);

url是设置请求的地址paramDefaults是预设的要提交的数据action是自定义的函数方法

感觉可以通过action来设置,但是不行

// 如果把action设置成这样 $resource(’ca/book/:id’,{},{ query: {header: { 'ca-g-oo': 'data-dnwaec2ioagwqevnm'} }, get: {header: { 'ca-g-oo': 'data-dnwaec2ioagwqevnm'} }} );

就报错了

Error: [$resource:badcfg] http://errors.angularjs.org/1.2.29/$resource/badcfg?p0=object&p1=array我要如何设置$resource的才能让所有的请求的带着我自定义的header啊?

问题解答

回答1:

interreputor可以满足你

回答2:

问题也解决了。。在设置$resource的时候要设置isArray属性

isArray属性完整代码如下

’amd’;/** * * RESTful创建服务 * by chenxuan 20160325 * * 创建一个$resource对象 * query : 获取列表 * get : 获取单个数据 * updata : 更新数据 * save : 新建数据保存 * * 关于缓存 * 默认缓存query和get请求,当有updata和save请求产生的时候清空所有缓存 * * ====v1.1====20160328 * functionSetting参数的对象不会直接覆盖没有在对象中存在的默认属性 * */define( [’app’ ], function (app){app.factory(’RESTful’, function ($resource,$cacheFactory){ return function (url, defaultParam, functionSetting){var RESTfulCacheID = '' + Math.random();var RESTfulCache = $cacheFactory(RESTfulCacheID, {capacity: 10});var defaultFunction = { query: {method: ’GET’,isArray: true,headers: { ’X-CSRF-TOKEN’: app.CSRF_TOKEN},cache: RESTfulCache }, get: {method:’GET’,isArray: false,headers: { ’X-CSRF-TOKEN’: app.CSRF_TOKEN},cache: RESTfulCache }, update: {method:’PUT’,isArray: false,headers: { ’X-CSRF-TOKEN’: app.CSRF_TOKEN},transformResponse: function (data, headers){ RESTfulCache.removeAll();} }, save : {method:’POST’,isArray: false,headers: { ’X-CSRF-TOKEN’: app.CSRF_TOKEN},transformResponse: function (data, headers){ RESTfulCache.removeAll();} }};if(functionSetting){ for(var i in functionSetting){if(typeof defaultFunction[i] == typeof {}){ for(var j in functionSetting[i]){defaultFunction[i][j] = functionSetting[i][j]; }}else{ defaultFunction[i] = functionSetting[i];} }}var returnRes = $resource(url, defaultParam, defaultFunction);returnRes.getCache = function (){ return RESTfulCache;}return returnRes; }}); })回答3:

使用路由拦截器,定义全局header

$httpProvider.interceptors.push([’$rootScope’, ’$q’, function ($rootScope, $q) { return {request: function (config) { // Header - Token config.headers = config.headers || {}; if (config.headers) { config.headers[’ca-g-oo’] = ’data-dnwaec2ioagwqevnm’; }; return config;},response: function (response) { if (response.status == 200) { // console.log(’do something...’); } return response || $q.when(response);},responseError: function (response) { return $q.reject(response);} } }])

相关文章: