2013-03-17 32 views
22

我有以下代码:服务与的RESTify(node.js的)静态文件

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" 
} 

我尝试了几个变化,但没有一个似乎工作。

我敢肯定,这应该是整个路线路径东西很明显我缺少

回答

19

restify将使用directory选项作为前缀。在你的情况下,它会寻找./public/docs/public/index.html

+27

我寻找可喜的文件记录。 – 2014-06-10 22:38:58

8
  1. directory选项是整个路径的前缀。
  2. 相对路径不在的RESTify的更高版本工作正常(我测试2.6.0-3,2.8.2-3 - 他们都产生NotAuthorized错误)

的解决方案现在变成:

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

然后你的静态文件需要在./docs/public
__dirname是包含你正在运行脚本的绝对路径的全局变量)基于@ NdeeJim的回答

+0

这是为我做的! '__dirname'选项是关键! – 2015-05-22 01:28:40

+0

OSX似乎存在一个阻止使用./语法的错误,所以这是唯一对我有用的东西。谢谢! – 2015-09-03 16:35:49

4

,任何人想知道如何为所有的静态资源:

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

救救我很多次,谢谢 – 2015-10-13 15:38:46