Aldo-application
is an object containing a stack of middleware functions which are composed and executed upon each HTTP request.
const Application = const app = // add a request handlerapp // create a HTTP server to serve the applicationappstartprocessenvPORT
Middlewares
Middlewares could be a common or an async function.
Each function receives a request context and a next
function to call the downstream middlewares, and must return a response as output.
// Handler function signaturedeclare ;
You can register as many middlewares as needed with the application's method .use(fn)
// to add a handler directly in the stackapp
Whether a middleware runs before or after a downstream middlewares depends on the middleware itself. For example, the following middleware would perform some task before the others
app
However, this middleware would perform its task after the request is handled by the following middlewares
app
Context
The context object is a simple plain object with these properties:
request
refers to the incoming request objectresponse
function to get a newResponse
instance each time called- Other fields defined with
.set(key, value)
or.bind(key, getter)
declare
To extend the request context, and add shared properties, like a DB connection or a global logger, you may use .set(key, value)
const mongoose = await mongoose app
To set a per request private properties, you may use .bind(key, getter)
. This method takes a field name, and a function to be used as a lazy
getter of the field value.
app
This method is very useful, since it allows you to lazily (only when needed) attach a per request property into the context without adding a dedicated handler.
.has(key)
and .get(key)
are aldo available to check the existence of a certain field or to get a previously defined field value.
Response
The middleware output could be:
strings
orbuffers
sent directlystreams
which will be piped to the outgoing responsenull
orundefind
as empty responses (By default with 204 status code)Response
instances which can be created with the contextresponse
property- otherwise, any other value will be serialized as
JSON
, with the properContent-Type
andContent-Length