Middleware call sequences

As you see in the previous section, a middleware can be use on different context:

Middleware associated to a controller or endpoint as a same constraint that an endpoint. It'll be played only when the url request match with the path associated to the controller and his endpoint method.

When a request is sent to the server all middlewares added in the ServerLoader, Controller or Endpoint with decorators will be called while a response isn't sent by one of the middleware in the stack.

Note: The middlewares represented in the Endpoint (0-n) box will be replayed as many times as it has endpoint that match the url of the request.

* Render is called only when a the @Render o @ResponseView decorator is used on the endpoint.

** SendResponse middleware send a response only when a data is return by the endpoint method.

For example:

export class MyCtrl {
    endpointA(@Next() next()) {
    endpointB() {
        return {}

According to the call sequence scheme, the stack will be there:

  • Middlewares added in ServerLoader (logger, express middleware, etc...),
  • MdlwCtrlBefore,
  • MdlwCtrl,
  • MdlwBefore,
  • MyCtrl.endpointA,
  • MdlwAfter,
  • SendResponse, (but nothing data is returned by the endpointA)
  • MdlwCtrl,
  • MyCtrl.endpointB,
  • MdlwAfter,
  • SendResponse, send a response because endpointB return a data,
  • MdlwCtrlAfter, but this middleware will not be called because a response is sent.
  • Middleware added in ServerLoader (not called too).