I am learning to use Node.js. Currently, I have a folder structure that looks like the following:
index.html
server.js
client
index.html
subs
index.h
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
this is how i'm serving static files in restify
server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({
directory: __dirname,
default: 'index.html'
}));
public access path will be : example.com/public/docs/index.html
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
I came across this issue just recently, so while this may not help you it could help others who are having trouble with it.
When you declare Restify as const restify = require('restify');
, the serveStatic method will be in the plugins object so using restify.serveStatic
will quietly fail. The correct way to access the method is restify.plugins.serveStatic
.
You can find the update docs here: http://restify.com/docs/plugins-api/#serve-static
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
server.get('/', function(req, res, next) {
fs.readFile(__dirname + '/index.html', function (err, data) {
if (err) {
next(err);
return;
}
res.setHeader('Content-Type', 'text/html');
res.writeHead(200);
res.end(data);
next();
});
});