A back-end (Node.js) development tool to serve front-end projects with back-end reverse proxy for API. Configure a tool and serve your front-end projects.
- Installation
- Run installed server
- Run without installation
- Configuration
- Configuration Recipes
- Rights and Agreements
npm install --save-dev @lopatnov/express-reverse-proxy
express-reverse-proxy
--help
shows command line help--config <file name>
sets server configuration file. Default value isserver-config.json
. See configuration file example by this link.
express-reverse-proxy --config ./server-config.json
npx @lopatnov/express-reverse-proxy
Edit server-config.json
file
{
"port": 8080
// ...
}
To configure server port, edit port
variable. The default server port is 8080
.
To set headers for all requests use headers
variable
{
// ...
"headers": {
"Access-Control-Allow-Origin": "*"
}
// ...
}
The folders
is a variable to serve static files such as images, CSS files, and JavaScript files.
{
"folders": "www"
}
This configuration means that the server will serve static files from a local www
directory. The folders
variable can changed by a value of relative path like "./www", "../../my-nice-project/www" or "./project/my-front-end-files".
{
"folders": ["./www", "./mock-json", "../../images"]
}
This configuration means that the server will serve static files from multiple directories:
./www
./mock-json
../../images
{
"folders": {
"/": "dist",
"/api": "./mock-json",
"/assets": {
"/images": "./images",
"/css": "./scss/dist",
"/script": "./scripts"
}
}
}
This configuration means that the server will serve static files from multiple directories. The url path maps to this directories.
In example above you can see the next mapping:
url: /
directory: dist
url: /api
directory: ./mock-json
url: /assets/images
directory: ./images
url: /assets/css
directory: ./scss/dist
url: /assets/script
directory: ./scripts
The proxy
variable intended for request redirect to 3rd-party server and getting result of this response.
{
"port": 4200,
"folders": "www",
"proxy": {
"/api": "localhost:8000"
}
}
This configuration means that the server will serve static files from a local www
directory on 4200 port with remote API on http://localhost:8000. When the web-site makes request to "/api" path, the request will redirect to remote server with localhost:8000 address.
To handle unhandled requests use unhandled
variable. It's behavior depends on Accept header. It can be used any accept header.
{
...
"unhandled": {
"html": { // <-- Accept header for html requests
...
},
"json": { // <-- Accept header for json requests
...
},
"xml": { // <-- Accept header for xml requests
...
},
"*": { // <-- Any accept header
...
}
}
...
}
Each accept header can contain its options.
"html": { // <-- Accept header for HTML requests (for example)
"status": 307, // <-- Response status code Temporary redirect, see 307 http status code
"headers": { // <-- Headers
"Location": "/"
}
},
"json": { // <-- Accept header for json requests
"status": 404, // <-- Response status code Not Found
"send": { // Response JSON object
"error": "JSON Not Found"
}
},
"xml": { // <-- Accept header for XML requests
"status": 404, // <-- Response status code Not Found
"send": "<error>Not Found</error>" // Response is text
},
"*": { // <-- Any accept header
"status": 404, // <-- Response status code Not Found
"file": "./www/not-found.txt" // Response read from file "./www/not-found.txt"
}
Server listening in 8080 port
- Request --> Search static file in "www" folder --> File found --> Response is the file
- Request --> Search static file in "www" folder --> File not found --> Make request to back-end http://localhost:4000/current-path --> Response from the back-end
{
"port": 8080,
"folders": "www",
"proxy": "localhost:4000"
}
Server listening in 8080 port
- Request --> Search static file in "www" folder --> File found --> Response is the file
- Request --> Search static file in "www" folder --> File not found --> Response 404 Not Found
- Request /api/current-path --> Make request to back-end http://localhost:4000/current-path --> Response from the back-end
{
"port": 8080,
"folders": "www",
"proxy": {
"/api": "localhost:4000"
}
}
License Apache-2.0
Copyright 2020–2022 Oleksandr Lopatnov