hariharasudhan94

hariharasudhan94

404 Error Handling Inside Plug?

let say i have routes like follow
web routes:
http://localhost:4000/department/:id/show
http://localhost:4000/department/:dept_id/user/:user_id
api routes:
http://localhost:4000/api/v1/department/:id/show
http://localhost:4000/api/v1/department/:dept_id/user/:user_id
and my module plug looks like

def call(%Plug.Conn{ params: %{ "dept_id" => dept_id } } = conn, _params) do
  logged_in_user = Guardian.Plug.current_resource(conn)
  result = MemberRepo.findUserBelongsToDept(logged_in_user, dept_id)
  case result do
    {:ok, 1} ->
      conn #user belongs to group continue
    {:ok, 0} ->
      IO.puts "#{conn}"
      conn
      |> put_status(404)

    {:error, error}->
      conn
end

On those routes which i mentioned above i was checking whether the user belongs to the department or not using above plug. if not it returns {:ok, 0}

i want to render 404.html for webpage and json response for api calls within the plug , how can i achieve this?

First Post!

OvermindDL1

OvermindDL1

Easiest way is to call the error view render function with whatever code you want then halt() the pipeline. :slight_smile:

Probably more correct ways, but that would work.

Most Liked

chrismccord

chrismccord

Creator of Phoenix

this is the right answer :slight_smile:

def call(conn, _) do
  case logics(...) do
    :ok -> conn  
    :error ->
      conn
      |> Phoenix.Controller.render(MyApp.Web.ErrorView, :"404")
      |> halt()
  end
end

Passing an atom to Phoenix.Controller.render will handle the content negation and render the html/json/etc template.

10
Post #4
hariharasudhan94

hariharasudhan94

Mistake from my side only, this code works now :relaxed:

 conn = conn
            |>  Phoenix.Controller.render(XXXX.Api.V1.ErrorView, :"404error")
            |>  halt()
Ankhers

Ankhers

You could write a controller test that looks something like the following

test "this thing halts", %{conn: conn} do
  conn = get(conn, some_path(conn, :index)
  assert conn.halted
end

Where Next?

Popular in Questions Top

New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New

Other popular topics Top

JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 55125 245
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New

We're in Beta

About us Mission Statement