使用restify提供静态文件(node.js)

时间:2013-03-17 17:29:10

标签: node.js http restify

我有以下代码:

app.js

[...]

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

server.listen(1337, function() {
  console.log('%s listening at %s', server.name, server.url);
});

我有以下文件结构

app.js
public/
  index.html

所以我尝试浏览:

http://localhost:1337/docs/public/index.html

我得到了

{
  code: "ResourceNotFound",
  message: "/docs/public/index.html"
}

我尝试了几种变体,但似乎都没有。

我确信它应该是非常明显的我缺少的

3 个答案:

答案 0 :(得分:19)

restify将使用directory选项作为整个路径路径的前缀。在您的情况下,它会查找./public/docs/public/index.html

答案 1 :(得分:8)

  1. directory选项是整个路径的前缀。
  2. 在Restify的更高版本中,相对路径无法正常工作(我测试了2.6.0-3,2.8.2-3 - 它们都产生了NotAuthorized错误)
  3. 解决方案现在变为:

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

    然后您的静态文件需要位于./docs/public__dirname是一个全局变量,包含您正在运行的脚本的绝对路径)

答案 2 :(得分:5)

根据@ NdeeJim的回答,任何想知道如何提供所有静态资源的人都会这样做:

server.get(/\/?.*/, restify.serveStatic({
            directory: __dirname,
            default: 'index.html',
            match: /^((?!app.js).)*$/   // we should deny access to the application source
     }));