2016-12-14 134 views
0

我做了一個rails 5 API與Sourcey教程,現在我得到一個路由錯誤。Api軌道:沒有路線匹配

捲曲命令curl -H "Authorization: Token token=8NjQH4YVWQdUIve4xDQBaArr" http://localhost:3000/v1/users顯示404未找到的消息和「無路由匹配」在我的術語被升高,其中在服務器運行

無路由匹配[GET]「/ V1 /用戶」

所以我檢查了rails routes。輸出是:

v1_users GET /v1/users(.:format)  api/v1/users#index {:subdomain=>"api"} 
     POST /v1/users(.:format)  api/v1/users#create {:subdomain=>"api"} 
v1_user GET /v1/users/:id(.:format) api/v1/users#show {:subdomain=>"api"} 
     PATCH /v1/users/:id(.:format) api/v1/users#update {:subdomain=>"api"} 
     PUT /v1/users/:id(.:format) api/v1/users#update {:subdomain=>"api"} 
     DELETE /v1/users/:id(.:format) api/v1/users#destroy {:subdomain=>"api"} 

我們注意到我們有GET/V1 /用戶/:ID

如何解決這個問題呢?

routes.rb中:

Rails.application.routes.draw do 
    constraints subdomain: 'api' do 
    scope module: 'api' do 
     namespace :v1 do 
     resources :users 
     end 
    end 
    end 
end 

Users_controller.rb和api_controller.rb是內部/應用/控制器/ API/V1/

如果您需要的代碼的另一部分(控制器,模型....)不要猶豫,問

回答

4

的問題是,你的路線有一個子域約束。所以你的api只能在http://api.example.com/v1/users

你不能沒有通過Apache或nginx的設置虛擬主機,修改hosts文件或使用服務像Ngrok與本地主機使用子域名。

你也可以將其轉換爲路徑約束,而不是:

Rails.application.routes.draw do 
    namespace :api do 
    namespace :v1 do 
     resources :users 
    end 
    end 
end 
+0

非常感謝!我有理由讓範圍模塊:'API'做',我沒有添加'名稱空間'API'做'使用捲曲與URL http://api.example.com/v1/users – Tellimi

+0

是啊,這只是如果你想要而不是http:// example.com/api/v1/users'。如果您設置了一個隧道,以便您可以使用子域訪問您的Rails服務器,則無需更改路由。 – max