newton-peixoto

newton-peixoto

Hello everyone, is it possible to dispatch a request to a specific module using plug.router? Phoenix does it using its own macros but I’d like to know how to achieve the same or at least close results using only plug.router

Showing Posts 1 to 5

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

Hi @newton-peixoto yes there are examples of this on the first page of the plug docs, give it a whirl and we’ll be here if you run into issues!

newton-peixoto

newton-peixoto OP

Hello, thanks for replying. I read the doc but I’m probably missing something. The closest thing that I found was the foward macro but it fowards to another plug not to a module with implementation maybe the :do option should do it?

EDIT#

I was thinking something like this

get "/baz", do: &HelloWorld.Controller.show/1

but it did not work

BradS2S

BradS2S

The convention is to do this:

get "/baz", HelloWorld.Controller, :show

the :show atom represents the name of the controller action that will handle the incoming request.

A controller action is a specific type of function that is designed to handle a specific type of request.

Phoenix is basically a giant function on a web connection (and then socket) that is broken down into a tiny steps so controller action functions would always need an arity of at least 2: one parameter for the connection and one for any parameters that might be needed for the change to the connection.

codeanpeace

codeanpeace

Off the top of my head, it might be worth trying to pass in conn without using the capture operator. Also, check out these other requirements from the Plug.Router docs:

Each route receives a conn variable containing a Plug.Conn struct and it needs to return a connection, as per the Plug spec…
Each Plug.Router has a plug pipeline, defined by Plug.Builder, and by default it requires two plugs: :match and :dispatch. ``

So maybe something like this for a minimal example using only Plug.Router:

defmodule AppRouter do
  use Plug.Router

  plug :match # required by default
  plug :dispatch # required by default

  get "/baz" do
    HelloWorld.Controller.show(conn) # must accept and return a connection
  end
end
LostKobrakai

LostKobrakai

Another option is using forward. Phoenix controllers are also module plugs with MyApp.Controller.call(conn, :action)

So e.g.

defmodule AppRouter do
  use Plug.Router

  plug :match # required by default
  plug :dispatch # required by default

  forward "/baz", to: HelloWorld.Controller, init_opts: :show
end

Keep in mind that Plug.Router.forward has different options than Phoenix.Router.forward, so don’t confuse them.

— All posts loaded —

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews