You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							87 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							87 lines
						
					
					
						
							3.9 KiB
						
					
					
				| <h1 align="center">Fastify</h1>
 | |
| 
 | |
| ## Lifecycle
 | |
| Following the schema of the internal lifecycle of Fastify.
 | |
| 
 | |
| On the right branch of every section there is the next phase of the lifecycle,
 | |
| on the left branch there is the corresponding error code that will be generated
 | |
| if the parent throws an error *(note that all the errors are automatically
 | |
| handled by Fastify)*.
 | |
| 
 | |
| ```
 | |
| Incoming Request
 | |
|   │
 | |
|   └─▶ Routing
 | |
|         │
 | |
|         └─▶ Instance Logger
 | |
|              │
 | |
|    4**/5** ◀─┴─▶ onRequest Hook
 | |
|                   │
 | |
|         4**/5** ◀─┴─▶ preParsing Hook
 | |
|                         │
 | |
|               4**/5** ◀─┴─▶ Parsing
 | |
|                              │
 | |
|                    4**/5** ◀─┴─▶ preValidation Hook
 | |
|                                   │
 | |
|                             400 ◀─┴─▶ Validation
 | |
|                                         │
 | |
|                               4**/5** ◀─┴─▶ preHandler Hook
 | |
|                                               │
 | |
|                                     4**/5** ◀─┴─▶ User Handler
 | |
|                                                     │
 | |
|                                                     └─▶ Reply
 | |
|                                                           │
 | |
|                                                 4**/5** ◀─┴─▶ preSerialization Hook
 | |
|                                                                 │
 | |
|                                                                 └─▶ onSend Hook
 | |
|                                                                       │
 | |
|                                                             4**/5** ◀─┴─▶ Outgoing Response
 | |
|                                                                             │
 | |
|                                                                             └─▶ onResponse Hook
 | |
| ```
 | |
| 
 | |
| At any point before or during the `User Handler`, `reply.hijack()` can be called
 | |
| to prevent Fastify from:
 | |
| - Running all the following hooks and user handler
 | |
| - Sending the response automatically
 | |
| 
 | |
| NB (*): If `reply.raw` is used to send a response back to the user, `onResponse`
 | |
| hooks will still be executed
 | |
| 
 | |
| ## Reply Lifecycle
 | |
| 
 | |
| Whenever the user handles the request, the result may be:
 | |
| 
 | |
| - in async handler: it returns a payload
 | |
| - in async handler: it throws an `Error`
 | |
| - in sync handler: it sends a payload
 | |
| - in sync handler: it sends an `Error` instance
 | |
| 
 | |
| If the reply was hijacked, we skip all the below steps. Otherwise, when it is
 | |
| being submitted, the data flow performed is the following:
 | |
| 
 | |
| ```
 | |
|                         ★ schema validation Error
 | |
|                                     │
 | |
|                                     └─▶ schemaErrorFormatter
 | |
|                                                │
 | |
|                           reply sent ◀── JSON ─┴─ Error instance
 | |
|                                                       │
 | |
|                                                       │         ★ throw an Error
 | |
|                      ★ send or return                 │                 │
 | |
|                             │                         │                 │
 | |
|                             │                         ▼                 │
 | |
|        reply sent ◀── JSON ─┴─ Error instance ──▶ setErrorHandler ◀─────┘
 | |
|                                                       │
 | |
|                                  reply sent ◀── JSON ─┴─ Error instance ──▶ onError Hook
 | |
|                                                                                 │
 | |
|                                                                                 └─▶ reply sent
 | |
| ```
 | |
| 
 | |
| Note: `reply sent` means that the JSON payload will be serialized by:
 | |
| 
 | |
| - the [reply serialized](./Server.md#setreplyserializer) if set
 | |
| - or by the [serializer compiler](./Server.md#setserializercompiler) when a JSON
 | |
|   schema has been set for the returning HTTP status code
 | |
| - or by the default `JSON.stringify` function
 |