Serving static files with restify
From the documentation:
server.get(/\/docs\/public\/?.*/, restify.plugins.serveStatic({ directory: './public'}));
But this will search files in the ./public/docs/public/
directory.
If you want to not append request path to it, use appendRequestPath: false
option.
I prefer to use __dirname key here:
server.get(/\/public\/?.*/, restify.plugins.serveStatic({ directory: __dirname }));
The value of __dirname
is equal to script file directory path, which assumed to be also a folder, where is public
directory.
And now we map all /public/.*
urls to ./public/
directory.
Now also exists serveStaticFiles plugin:
server.get('/public/*', // don't forget the `/*` restify.plugins.serveStaticFiles('./doc/v1')); // GET /public/index.html -> ./doc/v1/index.html file
According to my current restify version (v5.2.0)
the serveStatic
has been moved into plugins
, so the code would be like this
server.get( /\/(.*)?.*/, restify.plugins.serveStatic({ directory: './static', }))
Syntax above will serve your static files on folder static
. So you can get the static file like http://yoursite.com/awesome-photo.jpg
For some reason if you want to serve the static files under specific path like this http://yoursite.com/assets/awesome-photo.jpg
for example.
The code should be refactored into this
server.get( /\/assets\/(.*)?.*/, restify.plugins.serveStatic({ directory: `${app_root}/static`, appendRequestPath: false }))
The option appendRequestPath: false
above means we dont include assets
path into the file name
From Restify 7 the routes no longer take full regexes, so if you want /public/stylesheet.css
to serve the file ./public/stylesheet.css
, your code would now look like this:
server.get('/public/*', restify.plugins.serveStatic({ directory: __dirname,}))
This is because Restify 7 has a new (potentially faster) routing back-end: find-my-way