In this article, you will get solution to a problem that may occur when you are running a Node.js application using cPanel’s Node.js Selector.
Problem
A Node.js application can be created using cPanel’s Node.js Selector. When you try to view a page generated by the application, you get the below error message:
Cannot GET /url/
Here, url means the path you are trying to view.
Cause
Phusion Passenger is used by the Node.js Selector to manage Node.js applications. When an application is created in the Node.js Selector, the value in the Application URL text box is used by the Passenger to create the root path. For example, suppose the Application URL text box is set to myapp, then the root path for the application is “/myapp” and not “/”.
Note: This is a completely different behavior from most other web environments, where “/” is typically the root path.
Resolution
For resolving this issue, it is important to include the application URL in the routes. The below code sample represents the way of using the popular Express web application framework. Here let’s assume that the Application URL text box in cPanel’s Node.js Selector is set to myapp:
const express = require('express'); const app = express(); app.get('/myapp/', function(req, res){ res.send("Hello from the root application URL"); }); app.get('/myapp/test/', function(req, res){ res.send("Hello from the 'test' URL"); }); app.listen(0, () => console.log('Application is running'));
Here, two routes are defined, /myapp and /myapp/test. Suppose your domain name is example.com, and you use your web browser to view http://example.com/myapp or http://example.com/myapp/test, the pages get loaded as expected. But, if you visit any other URL under http://example.com/myapp, you get the Cannot GET error message.
Also Read
Steps to Setup Node.js for Web Applications Using End User Interface