From a4777b42446c2a9f45e7ad83f62f526edd9b3bfc Mon Sep 17 00:00:00 2001 From: "romain.lenzotti" Date: Thu, 13 Jun 2019 19:22:29 +0200 Subject: [PATCH] docs: Update documentation about controllers, interceptors and middlewares --- docs/assets/middleware-call-sequence.drawio | 1 + docs/assets/middleware-call-sequence.png | Bin 93734 -> 0 bytes docs/assets/middleware-call-sequence.svg | 2 + docs/assets/middleware.drawio | 1 + docs/assets/middleware.svg | 2 + docs/docs/controllers.md | 8 +-- docs/docs/custom-endpoint-decorators.md | 2 +- docs/docs/interceptors.md | 61 +++++------------- docs/docs/middlewares.md | 58 ++++++++++++++++- docs/docs/middlewares/call-sequence.md | 18 ++++-- .../interceptors/interceptor-example.ts | 23 +++++++ .../interceptors/interceptor-usage.ts | 12 ++++ .../snippets/middlewares/call-sequences.ts | 7 +- 13 files changed, 133 insertions(+), 62 deletions(-) create mode 100644 docs/assets/middleware-call-sequence.drawio delete mode 100644 docs/assets/middleware-call-sequence.png create mode 100644 docs/assets/middleware-call-sequence.svg create mode 100644 docs/assets/middleware.drawio create mode 100644 docs/assets/middleware.svg create mode 100644 docs/docs/snippets/interceptors/interceptor-example.ts create mode 100644 docs/docs/snippets/interceptors/interceptor-usage.ts diff --git a/docs/assets/middleware-call-sequence.drawio b/docs/assets/middleware-call-sequence.drawio new file mode 100644 index 00000000000..7aac84162de --- /dev/null +++ b/docs/assets/middleware-call-sequence.drawio @@ -0,0 +1 @@ +7ZtRj+I2EIB/DVL7sFUShyQ8Lix3W7VVJVZV754qk0xI7kzMOWaB/fV1iA1JHSA9hfgOjpVW8YztxDP+PM4YBmiy3L5neJX8QSMgA8eKtgP0NHAc3xuK/4VgVwpcNygFC5ZGpcg+Cl7SN5BCS0rXaQR5rSKnlPB0VReGNMsg5DUZZoxu6tViSup3XeEFaIKXEBNd+nca8aSUBo5/lD9DukjUnW1vVGqWWFWWI8kTHNFNRYSmAzRhlPLyarmdAClsp+xStnt3Qnt4MAYZb9OAPYSPT7s3dzl7/u3X3eztz+2Hfx6QHMcrJms5Yvm0fKdMwOg6i6DoxRqg8SZJObyscFhoN8LnQpbwJRElW1zmnNHPMKGEsn1rNPJ8hD2hiVNCKnKwoyH4Qi4fABiH7cmh2QeDiYkGdAmc7UQV2cCxpI3lJLN9Wd4cXeaqOknFXUMlxHKaLA59Hy0pLqQx/49hvWsbNnDmyGswrDBrELkdGdauG/YwmSuGRXaDYd2rGdbXzAiRIFYWKeMJXdAMk+lROq4b+ljnd0pX0ryfgPOdXH7wmtO68WGb8g9F81+GsvSxonnayp73hZ0qZGK4lUZF8WNVd2y2L6l2mqMty3ej0cGhxXDPu1NYh65ZCGesqJZSzBbAz9Rzm6cHA4J5+lp/js5dbWsITUhaDNWxZvBlDTk/g5T9FUgdLB3TjL/Dy5QUTnkG8go8DXE3TCG3zpSrI2U7DUh51yIq+EFUB0S5LYnyTBLlakS9J3SOi3bLNIoIbMTI846pivzR3LL0QBXH4IVhz7TZqCVu6Fq42eh74a0XbryW3NhWs5/7AadpN+cR8bzjKH0Vl4vi8q8cxhBTBoNiQpXqOVNaJRH3r7Rp6KZGYnObTvm8uEPvlc/AOJ/u98LnNx0P1VvBZbAdo3tMSyP7gPEUh8lVI+M3RZ5jPjK2eGfuAcV+8HDa4jE0iodzGo+rouGFAczjhuwGhiDue9PomA9KwR2hMWyLhm8UjWETGvcTL5DxeOHosft2ofDbQjEyCoV+njDNohVN91m7BGeCDNYxFRcT4b1SYTxUKAjugopRSypOebEnKkZNoeIx5gUL97KJcs3HCz39ebNkHA7LL5KBTJKhOr5vMszHDM8ECDeX83JQW+iMvtSrx6xANwPhygI5lXHO1yuVbv7J/rmSh64oumZy/9GZjIfFn2SyIi8/PbM6NB/F9M3E7UaxtqkAJzAKlJ4KeBFAzSBf0SyHE1g5P7A6YmU8BCJ9J3K7WAUtsUJGD12dpqRn06mr3C9+/fnq5VPa283jecYjGtLzePf2tRTP/Pp3GrbCEDXLe1/WVCke8v1S9igq2N5qWyIk9QqfiajHKCE1SMteT/AlLMvP+S+jGfzHdVKESbrIRDEUnhD3Q+PCT8Jv5FEqyhl1YsLU1++TM6BQyCXc9rqZEQfPnvkihNswIZxrTQhXp1KlcnUU79BfLY7PO/KXKB5/JrDXVX5rgab/Ag== \ No newline at end of file diff --git a/docs/assets/middleware-call-sequence.png b/docs/assets/middleware-call-sequence.png deleted file mode 100644 index 3ef7bb8c15df6da2de9b4b20ec1727723bb17ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93734 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 +
Client Request
Client Request
Global middlewares
Global middlewares
UseBefore
middlewares
[Not supported by viewer]
UseBeforeEach middlewares
UseBeforeEach middlewares
UseBefore middlewares
UseBefore middlewares
Use middlewares
Use middlewares
Endpoint handler
Endpoint handler
UseAfter middlewares
UseAfter middlewares
UseAfter middlewares
UseAfter middlewares
Render (1)
Render <sup>(1)</sup>
SendResponse (2)
SendResponse <sup>(2)</sup>
UseAfter
middlewares
[Not supported by viewer]
Global middlewares
Global middlewares
Controller
[Not supported by viewer]
Endpoints
Endpoints
\ No newline at end of file diff --git a/docs/assets/middleware.drawio b/docs/assets/middleware.drawio new file mode 100644 index 00000000000..22d3d5c84f4 --- /dev/null +++ b/docs/assets/middleware.drawio @@ -0,0 +1 @@ +5VZNc5swEP01nmkPngFkY3yMidtMJzm0PjRXBa1BiWCpEAb311cYiY+QeJJp04/phZHe7rK7b/UEMxKm9UdJ8+QGGYiZ57B6Ri5nnrd2A/1sgGMLLIkBYslZC7k9sOPfwYCOQUvOoBg5KkSheD4GI8wyiNQIo1JiNXbboxhnzWkME2AXUTFFv3KmkhYNvFWPXwGPE5vZ9detJaXW2XRSJJRhNYDIdkZCiajaVVqHIBruLC9t3IdnrF1hEjL1kgD1KaK3F/Po9vMqvNhfX9X7ZD4n7VsOVJSmYVOsOloGgGlCzBalSjDGjIptj24klhmDJo2jd73PNWKuQVeD96DU0UyXlgo1lKhUGGuhJD5AiALlKSdxnNXict1ZLPOas01bX1PUszwYqMBSRnCmeXueqIxBnfHzumnpUw6YgpJHHSdBUMUP4zqoOW9x59ePRC/MVF4xIXcyoVDwplXP+QLfSijUZGL9PBpyq4Qr2OX0REWlRfqz3B9AKqjPsz9lywZYOZj7IDDbqhdX55IMhOU7b8Tv8n9WgPdCBSz+pAK8yYRuOGMCKt3wLz77gXdHfF9b9lyIAc6WELDFW2mC/G2aWDyhCV/orBvGD3oZN8ttxnLkzUXUmnSmgfWJgHfS3lf645jnPIvfW687+Tju8dv+oStu+fvGqbf9D8TJNvgLI9sf \ No newline at end of file diff --git a/docs/assets/middleware.svg b/docs/assets/middleware.svg new file mode 100644 index 00000000000..d4a7601c722 --- /dev/null +++ b/docs/assets/middleware.svg @@ -0,0 +1,2 @@ + +
Client Request
Client Request
Middleware
Middleware
Endpoint
(request mapping)
[Not supported by viewer]
\ No newline at end of file diff --git a/docs/docs/controllers.md b/docs/docs/controllers.md index 5aa3a280fa3..b3522e6d344 100644 --- a/docs/docs/controllers.md +++ b/docs/docs/controllers.md @@ -106,7 +106,7 @@ For the session, cookies or locals data attached on the request, is the same thi ### Decorators - + ### Status @@ -204,7 +204,7 @@ For more details about Middleware declaration see the [Middlewares](/docs/middle The following decorators lets you add custom middleware on a method or on controller: - + #### Example @@ -216,10 +216,10 @@ The following decorators lets you add custom middleware on a method or on contro When a request is sent to the server all middlewares added on the ServerLoader, Controller or Endpoint will be called while a response isn't sent by one of the middleware in the lifecycle. -
+
::: tip -See [middleware call sequence](/docs/middlewares/call-sequence.md) for more information. +See [middlewares section](/docs/middlewares.md) for more information. ::: ### Child controllers diff --git a/docs/docs/custom-endpoint-decorators.md b/docs/docs/custom-endpoint-decorators.md index 8497cbb6fe3..a234ed870c6 100644 --- a/docs/docs/custom-endpoint-decorators.md +++ b/docs/docs/custom-endpoint-decorators.md @@ -21,7 +21,7 @@ This option will be set to `endpoint.get` seen before with AcceptMimesMiddleware Ts.ED provide API to create you own decorator like @@AcceptMime@@ which register the options and at least one middleware with theses decorators and utils: -- @@UseBefore@@ or @@UseAfter@@ for middleware registration, +- @@Use@@, @@UseBeforeEach@@, @@UseBefore@@, or @@UseAfter@@ for middleware registration, - @@applyDecorator@@ if you want to combine different decorators, - @@StoreMerge@@ or @@StoreGet@@ to register options. diff --git a/docs/docs/interceptors.md b/docs/docs/interceptors.md index d1bbc25a1fe..00052fbb92c 100644 --- a/docs/docs/interceptors.md +++ b/docs/docs/interceptors.md @@ -1,9 +1,20 @@ # Interceptors -Creating and consuming an interceptor is two-step process. +An interceptor is a class annotated with the @@Interceptor@@ decorator. Interceptors should implement the @@IInterceptor@@ interface. +Interceptors have a set of useful capabilities which are inspired by the [Aspect Oriented Programming](https://en.wikipedia.org/wiki/Aspect-oriented_programming) (AOP) technique. + +Creating and consuming an interceptor is two-step process: 1. Create and annotate the interceptor class that will intercept calls to service methods -2. Decide which methods will be intercepted by which interceptor +2. Decide which methods will be **intercepted** by which **interceptor** + +They make it possible to: + +- bind extra logic before / after method execution +- transform the result returned from a function +- transform the exception thrown from a function +- extend the basic function behavior +- completely override a function depending on specific conditions ## Decorators @@ -14,55 +25,13 @@ Creating and consuming an interceptor is two-step process. To create interceptor class you need to implement he `IInterceptor` interface and implement the `aroundInvoke(ctx: IInterceptorContext)` method, and use the `@Interceptor()` annotation to register your interceptor class. Inside your `src/interceptors/MyInterceptor.ts` folder create the following simple interceptor. -```typescript -import { IInterceptor, IInterceptorContext, Interceptor, InjectorService } from '@tsed/common'; - -@Interceptor() -export class MyInterceptor implements IInterceptor { - // you can inject other components as usual - constructor(injSrv: InjectorService) { - // do some logic - } - - /** - * ctx: The context that holds the dynamic data related to the method execution and the proceed method - * to proceed with the original method execution - * - * opts: Static params that can be provided when the interceptor is attached to a specific method - */ - aroundInvoke(ctx: IInterceptorContext, opts?: any) { - console.log(`the method ${ctx.method} will be executed with args ${ctx.args} and static data ${opts}`); - // let the original method proceed - const retValue = ctx.proceed(); - - console.log(`the method was executed, and returned ${retValue}`); - - // must return the returned value back to the caller - // the retValue might be a promise in which case you can use .then to chain other code logic - // or you can use async aroundInvoke and await ctx.proceed() to execute the code in linear fashion - return retValue; - } -} -``` +<<< @/docs/docs/snippets/interceptors/interceptor-example.ts ## Use the interceptor Now that your interceptor logic is in place you can use it in any other service. You need to use the `@Intercept(InterceptorClass, opts)` annotation to register which interceptor should be used for the specific method you want to intercept. An example service in `src/services/MyService.ts`: -```typescript -import { Intercept } from '@tsed/common'; -import { MyInterceptor } from '../interceptors/MyInterceptor'; - -export class MyService { - // MyInterceptor is going to be used to intercept this method whenever called - // 'simple data' is static data that will be passed as second arg the the interceptor aroundInvoke - // this can be any data, you can pass array or object for that matter - @Intercept(MyInterceptor, 'simple data') - mySimpleMethod() { - console.log('the simple method is executed'); - } -} -``` +<<< @/docs/docs/snippets/interceptors/interceptor-usage.ts If the service method is executed like `myServiceInstance.mySimpleMethod()` we will get the following output: diff --git a/docs/docs/middlewares.md b/docs/docs/middlewares.md index 00b98522873..71e2ca580c6 100644 --- a/docs/docs/middlewares.md +++ b/docs/docs/middlewares.md @@ -6,6 +6,9 @@ to inject other services on his constructor. All middlewares decorated by @@Middleware@@ have one method named `use()`. This method can use all parameters decorators as you could see with the [Controllers](/docs/controllers.md) and return promise. +
+ + ## Configuration To begin, you must adding the `middlewares` folder on `componentsScan` attribute in your server settings as follow : @@ -58,10 +61,63 @@ Endpoint middleware must be used on class controller or endpoint method with the <<< @/docs/docs/snippets/middlewares/endpoint-middleware-usage.ts -> See [middleware call sequence](/docs/middlewares/call-sequence.md) for more information. +::: + +## call sequences + +As you see in the previous section, a middleware can be use on different context: + +- [ServerLoader](/docs/server-loader.md), +- [Controller](/docs/controllers.md), +- [Endpoint](/docs/controllers.md). + +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](/docs/server-loader.md), [Controller](/docs/controllers.md) or Endpoint with decorators + will be called while a response isn't sent by one of the handlers/middlewares in the stack. + +
+::: tip Note (1) +Render middleware is called only when a the @@Render@@ decorator is used on the endpoint. ::: +::: tip Note (2) +SendResponse middleware send a response only when a data is return by the endpoint method or if the endpoint is the latest called endpoint for the resolved route. +::: + +::: tip +The middlewares shown in the Endpoints box will be replayed as many times as it has endpoint that match +the request url. +::: + +::: warning +Only middlewares shown in the Endpoints box can use @@EndpointInfo@@ decorator to retrieve endpoint context execution. +::: + +For example: + +<<< @/docs/docs/snippets/middlewares/call-sequences.ts + +According to the call sequence scheme, the stack calls will be there: + +- **Middlewares** added in ServerLoader (logger, express middleware, etc...), +- **MdlwCtrlBefore**, +- **MdlwCtrlBeforeEach** +- **MdlwBefore**, +- **MdlwCtrl**, +- **MyCtrl.endpointA**, +- **MdlwAfter**, +- **SendResponse**, (but nothing data is returned by the endpointA) +- **MdlwCtrlBeforeEach** +- **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). + ## Handle error Express allows you to handle any error when your middleware have 4 parameters like this: diff --git a/docs/docs/middlewares/call-sequence.md b/docs/docs/middlewares/call-sequence.md index 7456b767c90..c2ee5cca88f 100644 --- a/docs/docs/middlewares/call-sequence.md +++ b/docs/docs/middlewares/call-sequence.md @@ -12,28 +12,32 @@ It'll be played only when the url request match with the path associated to the When a request is sent to the server all middlewares added in the [ServerLoader](/docs/server-loader.md), [Controller](/docs/controllers.md) 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. +::: tip Note +The middlewares shown in the Endpoints box will be replayed as many times as it has endpoint that match +the request url. +::: -> \* Render is called only when a the @Render o @ResponseView decorator is used on the endpoint. +> (1) Render middleware is called only when a the @@Render@@ decorator is used on the endpoint. -> \*\* SendResponse middleware send a response only when a data is return by the endpoint method. +> (2) SendResponse middleware send a response only when a data is return by the endpoint method or if the endpoint is the latest called endpoint for the resolved route. For example: <<< @/docs/docs/snippets/middlewares/call-sequences.ts -According to the call sequence scheme, the stack will be there: +According to the call sequence scheme, the stack calls will be there: - **Middlewares** added in ServerLoader (logger, express middleware, etc...), - **MdlwCtrlBefore**, -- **MdlwCtrl**, +- **MdlwCtrlBeforeEach** - **MdlwBefore**, +- **MdlwCtrl**, - **MyCtrl.endpointA**, - **MdlwAfter**, - **SendResponse**, (but nothing data is returned by the endpointA) +- **MdlwCtrlBeforeEach** - **MdlwCtrl**, - **MyCtrl.endpointB**, - **MdlwAfter**, diff --git a/docs/docs/snippets/interceptors/interceptor-example.ts b/docs/docs/snippets/interceptors/interceptor-example.ts new file mode 100644 index 00000000000..8f23f67bcef --- /dev/null +++ b/docs/docs/snippets/interceptors/interceptor-example.ts @@ -0,0 +1,23 @@ +import {IInterceptor, IInterceptorContext, IInterceptorNextHandler, Interceptor} from "@tsed/common"; + +@Interceptor() +export class MyInterceptor implements IInterceptor { + /** + * ctx: The context that holds the dynamic data related to the method execution and the proceed method + * to proceed with the original method execution + * + * opts: Static params that can be provided when the interceptor is attached to a specific method + */ + intercept(context: IInterceptorContext, next: IInterceptorNextHandler) { + console.log(`the method ${context.propertyKey} will be executed with args ${context.args} and static data ${context.options}`); + // let the original method proceed + const result = context.next(); + + console.log(`the method was executed, and returned ${result}`); + + // must return the returned value back to the caller + // the retValue might be a promise in which case you can use .then to chain other code logic + // or you can use async aroundInvoke and await ctx.proceed() to execute the code in linear fashion + return result; + } +} diff --git a/docs/docs/snippets/interceptors/interceptor-usage.ts b/docs/docs/snippets/interceptors/interceptor-usage.ts new file mode 100644 index 00000000000..622ed5c1c3d --- /dev/null +++ b/docs/docs/snippets/interceptors/interceptor-usage.ts @@ -0,0 +1,12 @@ +import {Intercept} from "@tsed/common"; +import {MyInterceptor} from "../interceptors/MyInterceptor"; + +export class MyService { + // MyInterceptor is going to be used to intercept this method whenever called + // 'simple data' is static data that will be passed as second arg the the interceptor aroundInvoke + // this can be any data, you can pass array or object for that matter + @Intercept(MyInterceptor, "simple data") + mySimpleMethod() { + console.log("the simple method is executed"); + } +} diff --git a/docs/docs/snippets/middlewares/call-sequences.ts b/docs/docs/snippets/middlewares/call-sequences.ts index 421e01f17dd..e1a34a6744f 100644 --- a/docs/docs/snippets/middlewares/call-sequences.ts +++ b/docs/docs/snippets/middlewares/call-sequences.ts @@ -1,15 +1,16 @@ -import {Controller, Get, Next, Use, UseAfter, UseBefore} from "@tsed/common"; +import {Controller, Get, Next, Use, UseAfter, UseBefore, UseBeforeEach} from "@tsed/common"; @Controller("/") @UseAfter(MdlwCtrlAfter) @UseBefore(MdlwCtrlBefore) +@UseBeforeEach(MdlwCtrlBeforeEach) @Use(MdlwCtrl) export class MyCtrl { @Get("/") - @UseAfter(MdlwAfter) - @Use(Mdlw) @UseBefore(MdlwBefore) + @Use(Mdlw) + @UseAfter(MdlwAfter) endpointA(@Next() next: Next) { console.log("EndpointA"); next();