Middleware compiler
The middleware compiler provides a mechanism to run any number of middleware prior to invoking a webtask.
Webtask middleware are disigned in a connect-compatible way that should allow many express middleware to just work.
Usage:
-
Set the wt-node-dependencies
metadata property to the stringified JSON of an object having a @webtask/middleware-compiler
property whose value is the latest version of this module.
{"@webtask/middleware-compiler":"1.1.0"}
-
Set the wt-compiler
metadata property on your webtask to @webtask/middleware-compiler
.
-
Optionally, set the wt-middleware
metadata property to a comma-separated list of middleware references. Middleware references can be any combination of:
module_name
- The name of an npm module, in which case the module's default export is used. This would be equivalent to require('module_name')
.module_name/name_of_export_function
- The name of an npm module with the name of the desired export. This wouldbe equivalent to require('module_name').name_of_export_function
.http(s)://url.of/a/file/exporting/a/middleware.js
- A publicly accessible url from which the middleware's code will be downloaded and evaluated. The code must export a suitable middleware factory function as the default export.
-
Optionally, set the wt-debug
metadata property to a comma-separated list of debug references that contains wt-middleware
. This will result in additional debug information being sent to real-time logs.
How it works
A middleware is a Function
exported by a node module that returns another Function
having the signature function(req, res, next)
, where:
-
req
is the instance of http.IncomingRequest
for the current request. It has a req.webtaskContext
property:
req.webtaskContext
is a typical webtask context object that is augmented with a compiler
property. The compiler
object is exposed so that a middleware can be implemented that supports custom programming models. The compiler
property is an object that has nodejsCompiler
and script
properties where:
-
res
is the instance of http.ServerResponse
for the current request
-
next
is a function with the signature function next(error)
. A middleware function may be designed to complete the response, in which case it can omit calling next
. A middleware may also implement authentication logic, such as the authentication middleware. In this case, the middleware might invoke next
with an Error
. If the error has a statusCode
property, this will be used as the response status code. Otherwise, to allow control to go to the next middleware, or to the default middleware (which compiles and invokes the webtask code), the middleware can call next()
with no arguments.
Example middleware
** Authentication **