Serving static files with restify

前端 未结 7 1550
时光说笑
时光说笑 2020-12-29 20:26

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         


        
相关标签:
7条回答
  • 2020-12-29 20:29

    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
    
    0 讨论(0)
  • 2020-12-29 20:31

    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

    0 讨论(0)
  • 2020-12-29 20:34

    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

    0 讨论(0)
  • 2020-12-29 20:41

    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

    0 讨论(0)
  • 2020-12-29 20:47

    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

    0 讨论(0)
  • 2020-12-29 20:48
    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();
        });
    });
    
    0 讨论(0)
提交回复
热议问题