http-server-spa-with-auth
v1.0.7
Published
A simple http server with built in history-api-fallback behavior
Downloads
3
Readme
http-server-spa-with-auth
A small but fast static file server running on node, with built in history-api-fallback. Useful for serving up single page applications with frontend routing. You can start the server using the command line.
npm install http-server-spa-with-auth -g
http-server-spa-with-auth <directory> <fallback> <port> <cache> <username> <password>
cache, username and password are not required
Cache
Add headers : Expires
+ Cache-Control
Cache params is in seconds
Requests to the server are categorized as one of two types:
File Request
- A
file
request defined by any request url where last part of the path (after being split by the/
delimiter) contains a.
character.
In the event of a file
request the server tries to resolve the given path for example /assets/image.png
. If the file exists then it is sent as a response with the appropriate mime type and a status code of 200
. If the file does not exist however, then the server responds with the status code 404
.
Route Request
- A
route
request defined by any request that is not a file request.
In the event of any route
request, for example /user/profile
, the server immediately responds with the specified fallback
file. If the app root (just /
) is requested then the server responds with the status code 200
. If some other route was requested then the server responds with the status code 301
.
Frontend Routing
This approach presumes that your application handles routing on the frontend with javascript. There are many frontend routers out there..
..to name a few, but if you prefer to do things yourself a frontend router can be reduced to something a simple as a switch statement that gets evaluated every time the url changes:
window.onpopstate = () => {
switch (window.location.pathname) {
case '/': loadHomePage(); break;
case '/profile': loadProfilePage(); break;
}
}
history.pushState(null, null, window.location.pathname);
window.onpopstate();