Serving static files with restify Serving static files with restify node.js node.js

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