wolfiton

wolfiton

Can the Phoenix api be used directly with NEXTJS without a node server?

If not does the node server add delays to requests?

Also the example folder that NEXTJS offer for supported servers so far

Thank you in advanced

Showing Posts 1 to 10

mhanberg

mhanberg

Expert LSP Core Team

I believe you will always need a server that will run the Next.js server (this is a Node app).

If you then want an API (Phoenix in this case), you will need to run your Phoenix server in addition to the Next.js server.

wolfiton

wolfiton OP

I worked with node before. I was hoping that I can avoid adding the node server to the mix.

peerreynders

peerreynders

The closest that I’m aware of is ReactRender which uses ReactDOMServer under the hood.

Given that React components are JavaScript (rather than some independently specified templating DSL) it would be asking a bit much to have a React-based SSR technology work in the absence of a server-side JavaScript runtime (i.e. Node.js).

It seems ReactRender does get rid of a node server but Node.js is still in play.

bulldog_in_the_dream

bulldog_in_the_dream

Not an expert on Next.js, but as far as I know the Node server comes bundled with it and is there to facilitate server side rendering of the pages.

Your frontend’s API calls do not need to go through this server, they can go directly to the Phoenix backend.

wolfiton

wolfiton OP

I need to try this and come back with the results, even though, I think i will still need to add fastify(express server replacement, promises to be 30% faster).

Also SSR render feature depends on a node server as far as I experimented with it.

wolfiton

wolfiton OP

You may be right, but I think then i will lose SSR ability.

At that point there is no need for nextjs i can use react directly.

peerreynders

peerreynders

From:

def index(conn, _params) do
  component_path = "#{File.cwd!}/assets/js/HelloWorld.js"
  props = %{name: "Revelry"}

  { :safe, helloWorld } = ReactRender.render(component_path, props)

  render(conn, "index.html", helloWorldComponent: helloWorld)
end

And
https://github.com/revelrylabs/elixir_react_render/blob/master/lib/react_render.ex#L92-L110

So it looks to me that Node.js is rendering the React content but the phoenix controller is serving the rendered content - i.e. Node.js is rendering but not serving (but I haven’t looked much deeper in to it).

By the looks of things elixir-nodejs communicates with Node.js processes via ports.

wolfiton

wolfiton OP

it’s true but apparently next js needs express or any other node server to handle routing.

So i don;t think it can use the library that you suggested

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  const server = express()

  server.get('/a', (req, res) => {
    return app.render(req, res, '/a', req.query)
  })

  server.get('/b', (req, res) => {
    return app.render(req, res, '/b', req.query)
  })

  server.get('/posts/:id', (req, res) => {
    return app.render(req, res, '/posts', { id: req.params.id })
  })

  server.get('*', (req, res) => {
    return handle(req, res)
  })

  server.listen(port, err => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})
peerreynders

peerreynders

So i don’t think it can use the library that you suggested

RenderReact has nothing to do with Next.js.

  • On the one hand you want to use Next.js - it’s not entirely clear why, i.e. what pain point Next.js addresses for you and the problem that you are solving.
  • On the other hand you don’t want a separate Node.js server serving the frontend which is necessary for Next.js.

RenderReact is simply a means of serving server-side rendered React components through Phoenix without an additional node server (though it still relies on node processes).

wolfiton

wolfiton OP

I wanted to harness the power of phoenix with ecto and absinthe and serve my aplication in SSR and later make it PWA.

  • SSR because I want to have offline support

  • PWA progresive web app promises to have better performance then react-native apps ios and android.

Where Next? Top

Trending in Questions Top

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
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
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
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
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
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
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
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews