2016-04-24 38 views
0

我正在使用AngularJS,它使用Ruby on Rails API進行身份驗證。我在AngularJS中使用$ http服務來向後端註冊一個POST請求的用戶,但是我很困惑,因爲我得到的響應總是以HTML格式返回,它是索引頁的,而不是實際的數據rails API。我在AngularJS應用在localhost:9000上運行的本地環境中測試了這一點,Rails API在localhost:3000上。所述AngularJS使用其引導3000

我已通過使用捲曲命令測試滑軌API的響應請求到端口的代理:

$ curl -H "Content-Type: application/json" -d '{"user":{"email":"[email protected]","password":"12345678"}}' -X POST http://localhost:9000/api/users.json 

返回從服務器作爲響應:

{"success":true,"info":"Registered","data":{"user":{"id":5,"created_at":"2016-04-24T14:13:24.289Z","updated_at":"2016-04-24T14:13:24.298Z","email":"[email protected]","authentication_token":"-49zyhbCiddYdjssQx6i"},"auth_token":"-49zyhbCiddYdjssQx6i"}} 

以下是在前端的代碼,其是在一個AngularJS控制器:

$scope.register = function() { 
      $http({ 
       url: '/api/users', 
       method: 'POST', 
       data: { 
        user: $scope.user 
       } 
      }).then(
       // success 
       function(response) { 
        console.log(response.data); 
        console.log(response.auth_token); 
        tokenHandler.set(response.auth_token); 
        $location.path('/'); 
       }, 
       // error 
       function(response) { 
        $scope.user.errors = response; 
       }); 
     }; 

這裏是服務器響應代碼:

class Users::RegistrationsController < Devise::RegistrationsController 
respond_to :json 

def create 
build_resource(sign_up_params) 

if resource.save 
    sign_in resource 
    render status: 200, 
     json: { 
      success: true, 
      info: "Registered", 
      data: { 
       user: resource, 
       auth_token: current_user.authentication_token 
      } 
     } 
else 
    # Otherwise fail 
    render status: :unprocessable_entity, 
     json: { 
      success: false, 
      info: resource.errors, 
      data: {} 
     } 
end 
end 
end 

然而,當我打電話登記方法總是在HTML和我的前端的索引文件的響應。

我失去了一些東西在這裏?

+4

在你的'curl'調用中你的URL是'http:// localhost:9000/api/users.json',而在你的$ http'調用中,URL是'/ api/users' – yarons

+0

我試過http http:// localhost:9000/api/users.json在$ http調用中響應,但它與索引頁面的HTML相同。 – AlphaWolf

回答

0

不知道我明白髮生了什麼事。但是,從您的文章看,這是我的理解(我的英語不是完美無瑕):

  • 當外部調用(對角應用臨危的請求),該請求被fowarded端口3000(代理) 。因此,你爲什麼從「捲曲」電話有適當的迴應。
  • 當Angular應用程序發出請求時,它不會被轉發。因此,爲什麼要求/ api /用戶可以獲得Angular App索引(我認爲有一個用於索引的故障安全路由或某種理由來解釋該行爲)。

如果這是有道理的,你可以測試它嗎?

0

該代理似乎將localhost:9000調用指向服務器,但響應保留爲前端索引文件的HTML內容。我不確定實際問題是什麼,也不確定這種類型的東西。我通過發送$ http POST請求到localhost:3000而不是localhost:9000來解決這個問題。

0

它似乎沒有提出期待json的請求。並且rails需要顯式地(你的curl命令明確地請求json格式)

在你的角碼中你可以嘗試改變url從url: '/api/users'url: '/api/users.json'。您還可以檢查如何從角度發送預期的內容類型application/json

相關問題