Next.js w/ Custom Express Server example for IBM Cloud
Because I don’t wish to change a few words and re-digest the information, FreeCodeCamp has the best overview of Next.js features that is bite-sized.
The example app isn't anything special here. Shows routing. It will get you up and going on IBM Cloud in a few minutes using Next.
I was freaking out. I tend to try out and use new stuff that might help more than ‘hang on’ anything I have used time and time again. My deployment failed a few times on IBM Cloud given the Zeit custom-server-using-express main example in their Next.js GitHub repository.
Mars and his Heroku implementation saved me thirty minutes at the very least of trying to get it deployed. So I decided to share this riffing for IBM Cloud platform to save other people some time too possibly.
- First you need an account on IBM Cloud
- Install IBM Cloud CLI and restart terminal, type ibmcloud to check
- To minimize number of specifications per deploy to IBM Cloud you can use an application manifest like this one manifest.yml
Change the name and host to what you want them to be.
Go into root directory, make sure you have permissions for everything.
Now this next image - these are my actions I did for pushing up this application.
npm i --save ibmcloud login --sso ibmcloud target --cf ibmcloud app push
Watch deployment logs.
You should see ...
And that is it. You have Next.js example app on IBM Cloud. 🦑
If you are doing more than this example demo and it fails
ibmcloud cf logs [YOUR_APPSNAME] --recent
And watch it. I have been mostly able to troubleshoot from those logs and use cf docs.
Note: I altered the production to dev in the start script of package.json bc I hadn't installed dotenv and was first figuring out deployment of a live instance solely using next.js before actual implementation.
Most of the times the default Next server will be enough but sometimes you want to run your own server to customize routes or other kind of the app behavior. Next provides a Custom server and routing so you can customize as much as you want.
Because the Next.js server is just a node.js module you can combine it with any other part of the node.js ecosystem. in this case we are using express to build a custom router on top of Next.
The example shows a server that serves the component living in pages/a.js when the route /b is requested and pages/b.js when the route /a is accessed. This is obviously a non-standard routing strategy. You can see how this custom routing is being made inside server.js.