使用RESTIFY提供静态文件

Nod*_*bie 30 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
Run Code Online (Sandbox Code Playgroud)

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);
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

vp_*_*rth 43

从文档:

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

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

server.get(/\/public\/?.*/, restify.serveStatic({
    directory: __dirname 
}));
Run Code Online (Sandbox Code Playgroud)

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

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

  • [__dirname](https://nodejs.org/docs/latest/api/globals.html#globals_dirname) (2认同)

Adi*_*ana 10

根据我目前的restify版本(v5.2.0)

在serveStatic已移入plugins,所以代码会是这样

server.get(
  /\/(.*)?.*/,
  restify.plugins.serveStatic({
    directory: './static',
  })
)
Run Code Online (Sandbox Code Playgroud)

上面的语法将为文件夹上的静态文件提供服务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
  })
)
Run Code Online (Sandbox Code Playgroud)

appendRequestPath: false上面的选项意味着我们不包含assets文件名的路径


leo*_*leo 7

从 Restify 7 开始,路由不再使用完整的正则表达式,所以如果你想/public/stylesheet.css提供文件./public/stylesheet.css,你的代码现在看起来像这样:

server.get('/public/*', restify.plugins.serveStatic({
  directory: __dirname,
}))
Run Code Online (Sandbox Code Playgroud)

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