使用RESTIFY提供静态文件

时间:2013-10-09 20:11:40

标签: node.js restify

我正在学习使用Node.js.目前,我有一个如下所示的文件夹结构:

index.html
server.js
client
  index.html
  subs
    index.html
    page.html
res
  css
    style.css
  img
    profile.png
  js
    page.js
    jquery.min.js

server.js是我的网络服务器代码。我使用node server.js从命令行运行此命令。该文件的内容是:

var restify = require('restify');

var server = restify.createServer({
    name: 'Test App',
    version: '1.0.0'
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());

server.get('/echo/:name', function (req, res, next) {
    res.send(req.params);
    return next();
});

server.listen(2000, function () {
    console.log('%s running on %s', server.name, server.url);
});

如您所见,此服务器依赖于RESTIFY。我被告知必须使用RESTIFY。但是,我无法弄清楚如何提供静态文件。例如,如何在我的应用程序中为* .html,* .css,* .png和* .js文件提供服务?

谢谢!

7 个答案:

答案 0 :(得分:42)

来自documentation

server.get(/\/docs\/public\/?.*/, restify.serveStatic({
  directory: './public'
}));

但是这将搜索./public/docs/public/目录中的文件 我更喜欢在这里使用__dirname键:

server.get(/\/public\/?.*/, restify.serveStatic({
    directory: __dirname 
}));

__dirname的值等于脚本文件目录路径,该路径假定也是一个文件夹,其中是public目录。

现在我们将所有/public/.*个网址映射到./public/目录。

答案 1 :(得分:8)

根据我目前的解析版(v5.2.0)

<ul class="mainmenu"> <li><a href="javascript:;">Menu1</a> <ul class="mainmenu__sub mainmenu__sub--red"> <li><a href="javascript:;">Submenu1</a> <ul class="mainmenu__sub mainmenu__sub--green"> <li><a href="javascript:;">Subsubmenu1</a></li> <li><a href="javascript:;">Subsubmenu2</a></li> <li><a href="javascript:;">Subsubmenu3</a></li> </ul> </li> <li><a href="javascript:;">Submenu2</a></li> <li><a href="javascript:;">Submenu3</a></li> </ul> </li> <li><a href="javascript:;">Menu2</a></li> <li><a href="javascript:;">Menu3</a></li> <li><a href="javascript:;">Menu4</a></li> </ul>已移至serveStatic,因此代码将如此

plugins

上面的语法将为文件夹server.get( /\/(.*)?.*/, restify.plugins.serveStatic({ directory: './static', }) ) 上的静态文件提供服务。所以你可以获得像static

这样的静态文件

出于某种原因,如果您想在特定路径下提供静态文件,例如此http://yoursite.com/awesome-photo.jpg

代码应重构为此

http://yoursite.com/assets/awesome-photo.jpg

上面的server.get( /\/assets\/(.*)?.*/, restify.plugins.serveStatic({ directory: `${app_root}/static`, appendRequestPath: false }) ) 选项意味着我们不会在文件名中包含appendRequestPath: false路径

答案 2 :(得分:3)

从Restify 7获取路线no longer take full regexes,因此如果您希望/public/stylesheet.css提供文件./public/stylesheet.css,您的代码现在将如下所示:

server.get('/public/*', restify.plugins.serveStatic({
  directory: __dirname,
}))

这是因为Restify 7有一个新的(可能更快的)路由后端:find-my-way

答案 3 :(得分:1)

这就是我如何在restify中提供静态文件

server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({

          directory: __dirname,

          default: 'index.html'

        }));

公共访问路径为:example.com/public/docs/index.html

答案 4 :(得分:0)

我最近刚遇到过这个问题,所以虽然这对你有帮助,但它可以帮助那些遇到麻烦的人。

当您将Restify声明为const restify = require('restify');时,serveStatic方法将位于plugins对象中,因此使用restify.serveStatic将会悄然失败。访问该方法的正确方法是restify.plugins.serveStatic

您可以在此处找到更新文档:http://restify.com/docs/plugins-api/#serve-static

答案 5 :(得分:0)

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();
    });
});

答案 6 :(得分:0)

试试这个:这里的视图是一个静态资源目录名

server.get('/\/.*/', restify.plugins.serveStatic({

    directory: __dirname + "/view/",
    default: './home.html' 

   })
);