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
			| 
								 
											3 years ago
										 
									 | 
							
								<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
							 |