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

'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
})