The solution was to change rack-cors config on API server: # config/application.rb config.middleware.use Rack::Cors do allow do origins '*' resource '*', :expose => ['access-token', 'token-type', 'client', 'expiry', 'uid'], :headers => :any, :methods => [:get, :post, :put, :delete] end end end
I've added headers name explicitly :expose => ['access-token', 'token-type', 'client', 'expiry', 'uid'] Problem solved. пятница, 17 апреля 2015 г., 17:34:24 UTC+7 пользователь Funny Cherry написал: > > > 0down votefavorite > <http://stackoverflow.com/questions/29695760/angular-http-dont-receive-response-headers-from-rails-json-api?noredirect=1#> > > I do HTTP request using $http from my Angular Yeoman app to JSON API > service based on Ruby on Rails and set. > > I have a controller > > angular.module('myApp') > .controller('ApiwrapperCtrl', [ '$scope', '$http', '$log', '$rootScope', > 'PubNub', '$cookies','$cookieStore', '$window', function($scope, $http, $log, > $rootScope, PubNub, $cookies, $cookieStore, $window) {....And method sending > request to API: > $scope.useHttp = function() { > var requestURL = > "http://localhost:3000/api/v1/auth/[email protected]&password=123123123"; > > var requestType = "POST" > var requestHeaders = {'Content-Type': 'application/json'}; > > $http({ > method: requestType, > url: requestURL, > headers: requestHeaders > }).success(function(data, status, headers, config) { > requestHeaders = new Object(); > requestHeaders['access-token'] = headers('access-token'); > requestHeaders['token-type'] = headers('token-type'); > requestHeaders['client'] = headers('client'); > requestHeaders['expiry'] = headers('expiry'); > requestHeaders['uid'] = headers('uid'); > > console.log("::: AUTH HEADERS :::"); > console.log(status); > console.log("|||"); > console.log(data); > console.log("|||"); > console.log(requestHeaders); > console.log("...................."); > > And I got in browser console: > > ::: AUTH HEADERS ::: > apiwrapper.js:228 200 > apiwrapper.js:229 ||| > apiwrapper.js:230 Objectdata: Object__proto__: Object > apiwrapper.js:231 ||| > apiwrapper.js:232 Objectaccess-token: nullclient: nullexpiry: nulltoken-type: > nulluid: null__proto__: Object > apiwrapper.js:233 .................... > > What am I doing wrong? How can I read headers in my Angular app properly? > > P.S> Previously it was working and read headers this way successful when > Angular was a part of Rails project. > > Now I use rack-cors on the API serverside. Added to config/application.rb: > >> config.middleware.use Rack::Cors do >> allow do >> origins '*' resource '*', :headers => :any, :methods => [:get, >> :post, :put, :delete] >> end >> end > > to allow requests from external apps. > -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.
