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.
		
		
		
		
		
			
		
			
				
					50 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					50 lines
				
				1.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const path = require('path')
							 | 
						||
| 
								 | 
							
								const Handlebars = require('handlebars')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const fastify = require('fastify')({ logger: { level: 'trace' } })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Handlebar template for listing files and directories.
							 | 
						||
| 
								 | 
							
								const template = `
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								  <body>
							 | 
						||
| 
								 | 
							
								    dirs
							 | 
						||
| 
								 | 
							
								  <ul>
							 | 
						||
| 
								 | 
							
								    {{#dirs}}
							 | 
						||
| 
								 | 
							
								      <li><a href="{{href}}">{{name}}</a></li>
							 | 
						||
| 
								 | 
							
								    {{/dirs}}
							 | 
						||
| 
								 | 
							
								  </ul>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  list
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <ul>
							 | 
						||
| 
								 | 
							
								    {{#files}}
							 | 
						||
| 
								 | 
							
								      <li><a href="{{href}}" target="_blank">{{name}}</a></li>
							 | 
						||
| 
								 | 
							
								    {{/files}}
							 | 
						||
| 
								 | 
							
								  </ul>
							 | 
						||
| 
								 | 
							
								  </body>
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								const handlebarTemplate = Handlebars.compile(template)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify
							 | 
						||
| 
								 | 
							
								  .register(require('..'), {
							 | 
						||
| 
								 | 
							
								    // Array of absolute paths containing static files to serve
							 | 
						||
| 
								 | 
							
								    root: [path.join(__dirname, '/public'), path.join(__dirname, '/public2')],
							 | 
						||
| 
								 | 
							
								    // Do not append a trailing slash to prefixes
							 | 
						||
| 
								 | 
							
								    prefixAvoidTrailingSlash: true,
							 | 
						||
| 
								 | 
							
								    // Return a directory listing with a handlebar template
							 | 
						||
| 
								 | 
							
								    list: {
							 | 
						||
| 
								 | 
							
								      // html or json response? html requires a render method.
							 | 
						||
| 
								 | 
							
								      format: 'html',
							 | 
						||
| 
								 | 
							
								      // A list of filenames that trigger a directory list response.
							 | 
						||
| 
								 | 
							
								      names: ['index', 'index.html', 'index.htm', '/'],
							 | 
						||
| 
								 | 
							
								      // You can provide your own render method as needed.
							 | 
						||
| 
								 | 
							
								      render: (dirs, files) => handlebarTemplate({ dirs, files })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  .listen(3000, err => {
							 | 
						||
| 
								 | 
							
								    if (err) throw err
							 | 
						||
| 
								 | 
							
								  })
							 |