Should I develop a separate express server, or handle all API calls in my next.js app?

Depends on what your app does and how you are hosting it.

Running Next.Js on a standard server will be of little difference whether you are using nextjs's /api or expressjs.

However if you are hosting on serverless (e.g. Vercel), I would recommend using a separate express server if you have alot of CRUD operations because the warming up of serverless is really bad user experience.

Build and Deployment

Next/JS - If you want to edit something on the backend, and push the changes, it will require you to build the entire JS app, and depending on how big is your app, it can take alot of time (especially if alot of static generated pages).

Express - If you running express separately, you can build and deploy front end and backend separately. It's time saving, and you can also better organise your codes frontend/backend.

Choice of deployment

I have a choice to take advantage of Vercel to host my frontend, with static generated pages and some server side generated pages (automatic scaling, caching, CDN etc), and host my backend with a separate cluster of servers.

PS: I moved from single Next.JS app to NextJs+Express


I can think of a few things why they would have a different server from the one NextJS provides:

  1. Familiarity with Express, Koa, etc. All next-connect helps with this
  2. There is an already existing API in PHP, Express, Flask, etc.