Significance of port 3000 in Express apps
3000
is a somewhat arbitrary port number chosen because it allows you to experiment with express
without root access (elevated privilege). Ports 80 and 443 are the default HTTP and HTTPS ports but they require elevated privilege in most environments.
Using port 3000 in examples also helps indirectly emphasize that you ideally want to put your express
app behind nginx
or Apache httpd
or something like that which would listen on port 80 and/or 443.
There is no reason (that I'm aware of, anyway) why 3000 is better than 8000 or 4000 or 8080 or any of a number of other port numbers that are accessible without elevated privileges.
Related videos on Youtube
M Miller
Updated on July 09, 2022Comments
-
M Miller almost 2 years
I noticed that almost all examples of Express.js applications use port 3000 as the default listening port for HTTP servers. Is this just because it's a rarely used port, or is there any other reason for this port number?
If I want to run multiple apps side-by-side on my local machine, is it good practice to use ports like 3000, 3001, 3002, etc.?
(I understand that ideally, you'd let the system assign ports. This is just a question as a matter of simplicity, and why 3000 seems to be a conventional assignment.)
-
danilodeveloper almost 8 yearsThe only reason that I can see is that normally in UNIX systems, low ports require root access and high ports don't need to have root access. for example port 80 need root access, port 8080 don't need. I'm not sure if express have any other reason to use 3000 port.
-
-
M Miller almost 8 yearsCool, very helpful. I also noted that the lower 3xxx ports don't have too many major uses so they're pretty safe for development usage. en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
-
AO_ over 6 yearsIt's also important to note that ports < 1024 require escalated privilege to run on, further reading here: unix.stackexchange.com/questions/16564/…
-
zypA13510 about 6 yearsFor proxying node.js, I think Apache
httpd
is not as good asnginx
for performance reasons? -
goonerify about 4 yearsI don't quite understand this part of the answer because nginx doesn't automatically expose port 3000 "Using port 3000 in examples also helps indirectly emphasize that you ideally want to put your express app behind nginx or Apache httpd or something like that which would listen on port 80 and/or 443."
-
Trott about 4 years@goonerify nginx typically exposes port 80 and/or port 443 and acts as a proxy for access to some backend service that is using some arbitrary port, such as 3000. By having the Node.js example expose an HTTP server on port 3000, it implies (at least to me) that this is not something that is directly exposed to the world. It implies (again, at least to me) that you should put something like nginx in front of it if you want the world to have access to it.