robusto v0.0.1
Robusto
A Node.js HTTP2 static server.
Installation | Environment setup | API usage | CLI usage | Options | Details | License
Installation
Install the stable version:
npm i robustoInstall the latest version:
npm i stanislavzadiraev/robusto#master
Environment setup
Get ready to route requests:
Prepare DNS records with the target hostnames for routing requests to the loopback IP address in the local hosts file for a local usage.
Prepare DNS records with the target hostnames for routing requests to the current system IP address on the DNS servers for a network usage.
Use target IP addresses directly instead of hostnames.
Get ready for a high load:
Add
net.core.somaxconn=65535to/etc/sysctl.conf.Run
sysctl net.core.somaxconn=65535.
API usage
Signature
robusto([options])
Receives
An Object containing the options. Detailed in Options below.
Returns
A Promise resolved with the Http2SecureServer upon success.
Examples
Declare
import robusto from 'robusto'Execute
Create and run a simplex server:
robusto({ hostnames: ['localhost'] })Create and run a complex server:
robusto({ port:8080, hostnames: ['someonehost', 'otheronehost'], mapSignname: signname => `../signs/${signname}`, mapHostname: (hostname, pathname) => `../hosts/${hostname}`, mapPathname: (pathname, hostname) => `${pathname}` })
Control
After the server has been created, it can be closed directly:
robusto({ hostnames: ['localhost'] }) .then(server => ( server.close(), process.exit(0) ))After the server has been created, runtime errors can be catched:
robusto({ hostnames: ['localhost'] }) .then(server => server .on('error', error => ( console.error(error), process.exit(1) )) )After the server has not been created, throwed error can be catched:
robusto({ hostnames: ['localhost'] }) .catch(error => ( console.error(error), process.exit(1) ))
CLI usage
Configuration file
robusto.config.js exports the object containing the options for the execution command starting a server. Detailed in Options below.
Execution command
robusto starts a server with the options contained in the object exported from the configuration file.
Example
Configure
Create a configuration file named robusto.config.js:
export default {
port:8080,
hostnames: ['machine'],
mapSignname: signname => `../${signname}`,
mapHostname: (hostname, pathname) => hostname,
mapPathname: (pathname, hostname) => pathname
}Execute
Run robusto via package.json start/test script:
"scripts": {
"start": "robusto"
}Options
port: ANumberspecifies the port number to take.hostnames: AnArraycontaining the hostnames to serve.mapSignname(filename): AFunctionmapping paths to SSL files.mapHostname(hostname[, pathname]): AFunctiontransforming request hostname according to the specified hostname and pathname.mapPathname(pathname[, hostname]): AFunctiontransforming request pathname according to the specified hostname and pathname.
Details
Limitations
- Directory listing is not supported.
Requests
Resulted paths for file searchings are made up of the requested hostnames and pathnames according the transformations defined by
mapHostnameandmapPathnamefunctions if defined.Requested hostnames and pathnames are taken from incoming client requests.
Requested hostnames and pathnames are normalized by
path.normalizefunction.Requested hostnames are decoded by
punycode.toUnicodefunction.Requested pathnames are decoded by
decodeURIComponentfunction.
Responses
File requests matching to directories and directory requests matching to files are redirected.
File requests are responded by the files available by the resulted paths.
Directory requests are responded by the files that are both acceptable according the order of acceptable MIME types of client's requests and found within the directories available by the resulted paths.
Directory requests are responded by the files with the basenames defined as
index.Directory requests are responded by the files with the extensions defined by
mime.getExtensionfunction which receives the acceptable MIME types of client's requests.
Requests are responded by the MIME type defined by
mime.getTypefunction which receives the name of the found file.
Assets
If the certificate file or any one of the key files is not found, the selfsigned certificate file and both key files will be regenerated via node-forge.
If any one of the root directories is not found, the empty one will be created.
Features
- Deflate, Gzip, Brotli are supported and provided by zlib.
License
MIT.
6 years ago