I just wanted a basic little API server for toy projects, without having to park a container-ship of modules under it.
This is in no way intended to replace any mature, full-featured framework. It is spartan in some aspects, brings some unexpected baggage in others, makes some questionable design decisions, has the occasional opinion, and is likely somewhat idiosyncratic from an outside perspective.
+
+This was also created as a means to gain a better understanding of the existing web framework ecosystem by fussing with all the involved fiddly bits, a priori, from the bottom up.
+
The primary design goals are:
- self-contained: as few external dependencies as feasible
- not-infinitely-extensible: only does the things it needs to do as dictated by the projects it is used in
+- learning from mistakes made along the way
## Getting Started
-Construct it with a console-level-compatible logger capable of doing something meaningful with calls like level(scopeString, messageString, dataObject).
+Construct it with a console-level-compatible logger object capable of doing something meaningful with calls like `logger[level](scopeString, messageString, dataObject)`.
Within the server request handler:
-* dispatch(req, res) makes things go.
+- `dispatch(req, res)` makes things go.
Within the application implementation:
-* on(method, urlPath, handler) declares a thing to do when a request matches.
-* preHandler(req, res, ctx) can be overridden to do something to every request before it is handled.
+- `on(method, urlPath, handler)` declares a thing to do when a request matches.
+- `preHandler(req, res, ctx)` can be overridden to do something to every request before it is handled.
Handled content types can be extended by overriding:
-* parseBody(contentType, ctx) for incoming types.
-* renderError(contentType, err) for outgoing types.
+- `parseBody(contentType, ctx)` for incoming types.
+- `renderError(contentType, err)` for outgoing types.
Within your handlers:
-* setResponseType(responseTypes, req, res, ctx) can be called to negotiate content types.
-* async ingestBody(req, res, ctx) will parse request body data.
-* throw an Error.ResponseError with an Enum.ErrorResponse for a simple status code with optional details, when something goes awry.
+- `setResponseType(responseTypes, req, res, ctx)` can be called to negotiate content types.
+- `async ingestBody(req, res, ctx)` will parse request body data.
+- throw an `Error.ResponseError` with an `Enum.ErrorResponse` for a simple status code with optional details, when something goes awry.
Parameters and metadata are set in each request context.
-