2017-03-21 7 views
1

が、私は自分のアプリケーションに反応し、要求をプレゼントしようとフェニックスのバージョン1.3を使用していることはできません。フェニックス+リアクトはHTTPGET要求

HTTPGETがある
httpGet('/api/v1/users') 
    .then(function (data) { 
    console.log("http get works!!!!"); 
    }) 
    .catch(function (error) { 
    console.log("nope doesn't work"); 
    }); 

export function httpGet(url) { 
    return fetch(url, { 
    headers: buildHeaders(), 
    }) 
    .then(parseJSON); 
} 

parseJSONを:

export function parseJSON(response) { 
    return response.json(); 
} 

buildHeaders():

const defaultHeaders = { 
    Accept: 'application/json', 
    'Content-Type': 'application/json', 
}; 
function buildHeaders() { 
    const authToken = localStorage.getItem('phoenixAuthToken'); 
    return { ...defaultHeaders, Authorization: authToken }; 

そして、これは私のルーターです:

defmodule App.Web.Router do 
    use App.Web, :router 

pipeline :browser do 
    plug :accepts, ["html", "json"] 
    plug :fetch_session 
    plug :fetch_flash 
    plug :protect_from_forgery 
    plug :put_secure_browser_headers 
end 

pipeline :api do 
    plug :accepts, ["json"] 
    plug Guardian.Plug.VerifyHeader 
    plug Guardian.Plug.LoadResource 
end 

scope "/", App.Web do 
    pipe_through :browser # Use the default browser stack 
    get "/*path", PageController, :index 
end 

scope "/api", App.Web do 
    pipe_through :api 

    scope "/v1" do 
    post "/users", UserController, :create 
    get "/users", UserController, :index 
    end 
end 

私はHTTPGET要求が失敗したエラーを取得しておきます。だから、私の質問は私のルータに間違って何ですか?投稿、削除要求が機能します。私はルーターと何か関係があることを信じていますが、正確な問題を見つけることはできません。どんな助けにも感謝!

編集:私は取得、サーバーからの応答:

[info] GET /api/v1/current_user 
[debug] Processing with App.Web.PageController.index/2 
    Parameters: %{"path" => ["api", "v1", "users"]} 
Pipelines: [:browser] 
[info] Sent 200 in 260µs 

とGoogleのDevツール:

​​
+0

リクエストはサーバーに送信されますか?サーバーログに何かが記録されていますか?ブラウザのコンソールにエラーはありますか? Chrome Dev Toolsの[ネットワーク]タブから送信された正確なリクエストを確認できます。 – Dogbert

+0

ちょっと@Dogbert、私は応答を追加しました。それはすべてが正しいことを返しますが、応答はHTML型です、私はここでJSONでなければならないと思いますか? – Ilya

+0

ああ、最初の 'scope do ... end'を2番目のものの下に移動してみてください。あなたのワイルドカードルートがすべてをキャッチしているようです。 – Dogbert

答えて

1

あなたのキャッチオールルートget "/*path"/api/v1/usersに送信されたものも含め、すべてのGETリクエストを、一致しています/api/v1/usersルートの前に存在しているためです。下に移動すると、すべてが正常に動作するはずです。

pipeline :browser do 
    ... 
end 

pipeline :api do 
    ... 
end 

scope "/api", App.Web do 
    pipe_through :api 

    scope "/v1" do 
    post "/users", UserController, :create 
    get "/users", UserController, :index 
    end 
end 

scope "/", App.Web do 
    pipe_through :browser # Use the default browser stack 
    get "/*path", PageController, :index 
end 
+0

もう一度ありがとう!私はその注文がルータで重要であることを知らなかった。 – Ilya

+1

はい、ルートは、宣言されているのと同じ順序でfunction句にコンパイルされます。したがって、Elixirのfunction句と同様に、要求に一致する最初のルートが使用されます。 – Dogbert