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.
		
		
		
		
		
			
		
			
				
					79 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					79 lines
				
				2.8 KiB
			| 
											3 years ago
										 | <h1 align="center">Fastify</h1> | ||
|  | 
 | ||
|  | ## Middleware
 | ||
|  | 
 | ||
|  | Starting with Fastify v3.0.0, middleware is not supported out of the box and | ||
|  | requires an external plugin such as | ||
|  | [`@fastify/express`](https://github.com/fastify/fastify-express) or | ||
|  | [`middie`](https://github.com/fastify/middie). | ||
|  | 
 | ||
|  | 
 | ||
|  | An example of registering the | ||
|  | [`@fastify/express`](https://github.com/fastify/fastify-express) plugin to `use` | ||
|  | Express middleware: | ||
|  | 
 | ||
|  | ```js | ||
|  | await fastify.register(require('@fastify/express')) | ||
|  | fastify.use(require('cors')()) | ||
|  | fastify.use(require('dns-prefetch-control')()) | ||
|  | fastify.use(require('frameguard')()) | ||
|  | fastify.use(require('hsts')()) | ||
|  | fastify.use(require('ienoopen')()) | ||
|  | fastify.use(require('x-xss-protection')()) | ||
|  | ``` | ||
|  | 
 | ||
|  | You can also use [`middie`](https://github.com/fastify/middie), which provides | ||
|  | support for simple Express-style middleware but with improved performance: | ||
|  | 
 | ||
|  | ```js | ||
|  | await fastify.register(require('middie')) | ||
|  | fastify.use(require('cors')()) | ||
|  | ``` | ||
|  | 
 | ||
|  | Remember that middleware can be encapsulated; this means that you can decide | ||
|  | where your middleware should run by using `register` as explained in the | ||
|  | [plugins guide](../Guides/Plugins-Guide.md). | ||
|  | 
 | ||
|  | Fastify middleware do not expose the `send` method or other methods specific to | ||
|  | the Fastify [Reply](./Reply.md#reply) instance. This is because Fastify wraps | ||
|  | the incoming `req` and `res` Node instances using the | ||
|  | [Request](./Request.md#request) and [Reply](./Reply.md#reply) objects | ||
|  | internally, but this is done after the middleware phase. If you need to create | ||
|  | middleware, you have to use the Node `req` and `res` instances. Otherwise, you | ||
|  | can use the `preHandler` hook that already has the | ||
|  | [Request](./Request.md#request) and [Reply](./Reply.md#reply) Fastify instances. | ||
|  | For more information, see [Hooks](./Hooks.md#hooks). | ||
|  | 
 | ||
|  | #### Restrict middleware execution to certain paths
 | ||
|  | <a id="restrict-usage"></a> | ||
|  | 
 | ||
|  | If you need to only run middleware under certain paths, just pass the path as | ||
|  | the first parameter to `use` and you are done! | ||
|  | 
 | ||
|  | *Note that this does not support routes with parameters, (e.g. | ||
|  | `/user/:id/comments`) and wildcards are not supported in multiple paths.* | ||
|  | 
 | ||
|  | ```js | ||
|  | const path = require('path') | ||
|  | const serveStatic = require('serve-static') | ||
|  | 
 | ||
|  | // Single path | ||
|  | fastify.use('/css', serveStatic(path.join(__dirname, '/assets'))) | ||
|  | 
 | ||
|  | // Wildcard path | ||
|  | fastify.use('/css/(.*)', serveStatic(path.join(__dirname, '/assets'))) | ||
|  | 
 | ||
|  | // Multiple paths | ||
|  | fastify.use(['/css', '/js'], serveStatic(path.join(__dirname, '/assets'))) | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Alternatives
 | ||
|  | 
 | ||
|  | Fastify offers some alternatives to the most commonly used middleware, such as | ||
|  | [`@fastify/helmet`](https://github.com/fastify/fastify-helmet) in case of | ||
|  | [`helmet`](https://github.com/helmetjs/helmet), | ||
|  | [`@fastify/cors`](https://github.com/fastify/fastify-cors) for | ||
|  | [`cors`](https://github.com/expressjs/cors), and | ||
|  | [`@fastify/static`](https://github.com/fastify/fastify-static) for | ||
|  | [`serve-static`](https://github.com/expressjs/serve-static). |