2017-03-21 3 views
1

machen kann ich bin mit Phoenix-Version 1.3 mit meiner Anwendung Reagieren in und versuchen Anfrage zu machen Get:Phoenix + Reagieren nicht HttpGet Anfrage

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

wo HttpGet ist:

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 }; 

Und das ist mein Router:

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 

Ich erhalte Fehler, die meine httpget Anforderung fehlschlägt. Also, meine Frage ist was ist falsch mit meinem Router? Post, Delete-Anfrage funktioniert. Ich glaube, es hat etwas mit dem Router zu tun, aber ich kann das genaue Problem nicht finden. Jede Hilfe wird geschätzt!

Edit: Antwort vom Server erhalte ich:

[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 

Und Google Dev Tools:

Request Method:GET 
Status Code:200 OK 
Response Headers: Content-Type:text/html; charset=utf-8 
+0

Ist die Anfrage auf Ihren Server? Ist in den Serverprotokollen alles protokolliert? Gibt es einen Fehler in der Browserkonsole? Sie können die genaue Anfrage sehen, die über die Registerkarte "Netzwerk" in Chrome-Entwicklungstools gesendet wurde. – Dogbert

+0

Hey @Dogbert, ich habe die Antworten hinzugefügt. Es gibt zurück, dass alles korrekt ist, aber die Antwort ist HTML-Typ, ich denke, es sollte JSON hier sein? – Ilya

+0

Ah, versuche das erste 'scope do ... end' unter dem zweiten zu bewegen. Es sieht so aus, als ob deine Wildcard-Route alles fängt. – Dogbert

Antwort

1

Ihre catch-all Route get "/*path" wird alle GET-Anfragen passende, einschließlich die, die zu /api/v1/users gesendet da es vor der /api/v1/users Route vorhanden ist. Wenn Sie es unten verschieben, sollte alles wie erwartet funktionieren:

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

Danke nochmal! Ich wusste nicht, dass die Reihenfolge im Router wichtig ist. – Ilya

+1

Ja, Routen werden in Funktionsklauseln in derselben Reihenfolge kompiliert, in der sie deklariert sind. Daher wird genau wie in function-Klauseln in Elixir die erste Route verwendet, die der Anforderung entspricht. – Dogbert