a quick, flexible, fully typed development server


Keywords
server, proxy, http, https, devserver, development, typescript
License
MPL-2.0
Install
npm install webserv@2.1.0-next.1588877149493

Documentation

Webserv

Build Status Windows build status codecov.io npm version

Why use webserv?

Webserv's aim is to have a fast, simple way to provide a backend to your projects. We want to enable developers to start working on their experience immediately. Webserv is not, nor will ever be a production-ready server (for that we recommend Nestjs). Instead it is a quick and easy way to start serving your app with zero thought or investment.

Serve your folder right now without installing anything using npx.

npx webserv

Webserv comes with standard server patterns. Start a proxy, CRUD server, upload, or log connections from the command-line. Have a more complex use case? webserv supports JSON configs and has a fully-typed programmatic API so you will never be stuck.

Interested? Start experimenting now on Glitch

Remix on Glitch

Command Line

Webserv allows you to quickly start a fully fledged development server from the command line without editing a single file.

Start a https server with self-signed certificate like this:

webserv -m https -t file ./_dist -p 9999

Command-line Options

-m, --mode {http | https | ngrok}

Create a http or https server (defaults to http)

ngrok mode will create a local http server and use ngrok to create an externally accessible site on ngrok. The public url will be displayed on the console.

webserv -m https

-l, --log

Log all requests to the console

webserv -l

-p, --port

Set the port to use (defaults to 8888)

webserv -p 8000

-t crud

Start a basic CRUD server

webserv -t crud

This server keeps records in an internal store.

  • GET / will list all of the records
  • POST / with a json object in the body with an id to add a record
  • PUT / with a json object in the body to update a record
  • GET /id/:id to view a single record
  • DELETE /id/:id to delete a record

-t file {directory}

Serve the directory.

This is the default server type. If the directory is omitted the current directory will be served.

webserv -t file ./dist

-t log

Create a log server that logs all request to the console and returns 200.

webserv -t log

-t proxy {target}

Create a proxy server.

webserv -t proxy http://devpaul.com

-t upload {directory}

Create an upload server.

directory is the location where uploaded files will be stored

webserv -t upload ./files
  • GET / provides an interface to upload files
  • POST / uploads the file(s)
  • GET /list lists files that have been uploaded

webserv configuration

Webserv supports more complex usage through config files. When a file named webserv.json is present or when webserv is launched using the -c <configPath> option, webserv will launch using the provided configuration.

The available configurations match the server types (available with the -t option): crud, file, log, proxy, and upload.

The configuration json is used to specify services. Example webserv.json file:

{
	"services": [
		{
			"name": "file",
			"paths": {
				"/src/*": "./dist",
				"/aframe/*": "./node_modules/aframe",
				"/node_modules/*": "./node_modules",
				"*": "./src"
			}
		},
		{
			"name": "upload",
			"route": "/upload/*",
			"directory": "./uploadDirectory"
		},
		{
			"name": "crud",
			"route": "/users/*",
			"data": {
				"1": {
					"id": 1,
					"name": "Paul"
				}
			}
		}
	]
}

All service configurations include a name that refers to the service to be loaded and configuration options. Configuration options may be found on the type definitions in src/config/services.

Programmatic API

For users that may need to create their own services or have complex use cases that are not served the configuration, webserv offers a fully-typed programmatic API. See examples/hello and src/webserv/core/routes for example usage.