Search code examples
vue.jsnuxt.jsweb-deploymentserver-side-renderingpm2

How to run Nuxt2 serverMiddleware with pm2


I have a simple Nuxt ssr app with a serverMidlleware handling one api endpoint (/api/contact). To deploy the app I am using pm2. Running the app in development and in production (locally without pm2) everything works fine. Deploying it on a basic ubuntu server using pm2, the api endpoint becomes unreachable (404 not found).

As pointed out here, the middleware is not included in the .nuxt build. So, I made sure to copy the api directory (where my middleware is located) too.

for pm2 deployment, ecosystem.config.js:

module.exports = {
  apps: [
    {
      name: 'App',
      exec_mode: 'cluster',
      instances: 'max',
      script: './node_modules/nuxt/bin/nuxt.js',
      args: 'start'
    }
  ]
}

and inside nuxt.config.js:

serverMiddleware: [
  { path: '/api/contact', handler: '~/api/contact.js' }
]

As only the deployment via pm2 fails, I assume the other files are not of interest. I am assuming this must be related to some sort of pm2 config to find the api folder.


Solution

  • Following my answer here solved the issue here too.

    You probably had something missing in your nuxt.config.js file

    export default {
      ssr: true,
      target: 'server',
      modules: [
        '@nuxtjs/axios',
      ],
      serverMiddleware: [
        { path: '/api', handler: '~/server-middleware/rest.js' },
      ],
    }