2012-10-02 26 views
1

比方说,我有以下文件系统结构:Node.js的静态文件服务器逻辑(使用连接中间件)

/app/   Main application folder 
    /app.js  Server JS file ran by node.js 
    /public  Folder containing files for public website (port 80) 
    /index.html 
    /js/ 
     /game.js 
    /admin/  Folder containing files used by local network system (port X) 
    /index.html 
    /js/ 
     /screen.js 
    /share/  Folder containing files to be used by public website OR lan 
    /js/ 
     /jquery.js 

最终的结果是,admin/index.html会是什么样子:

<script type="text/javascript" src="/js/jquery.js"></script> 
<script type="text/javascript" src="/js/screen.js"></script> 

也就是说,我从不同位置加载两个文件。基本上,这里的想法是“检查文件是否在/share,如果不是,请尝试根据端口”“从文件夹加载它。

下面是当前代码我使用:

var connect = require('connect'), 
    sourcePublic = connect().use(
     connect.static(__dirname + '/public', { maxAge: 86400000 }) 
    ), 
    sourceAdmin = connect().use(
     connect.static(__dirname + '/admin', { maxAge: 86400000 }) 
    ), 
    sourceShare = connect().use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    serverPublic = http.createServer(sourcePublic).listen(80), 
    serverAdmin = http.createServer(sourceAdmin).listen(90); 
// ok, how do I use sourceShare? 

PS:该系统应通过通过http://host:90/本地网络是全球访问通过http://host/(可能是一个域或静态IP)和访问。

尽管端口90上的东西不会损害系统(它只是一个输出屏幕),但我宁愿如果人们无法从外部访问它(通过确保不存在端口90转发在路由器和服务器之间)。

回答

2

连接中间件是可堆叠的,所以你可以通过简单地堆叠所有想要的处理器的每个other.Public服务器收到后/公共/股处理程序和管理得到/管理并达到想要的结果/份处理程序。

所以请求公共服务器将搜索资源下/公共文件夹,如果没有找到,然后在/股文件夹进行搜索。和管理服务器一样。

var connect = require('connect'), 
    sourcePublic = connect().use(
     connect.static(__dirname + '/public', { maxAge: 86400000 }) 
    ).use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    sourceAdmin = connect().use(
     connect.static(__dirname + '/admin', { maxAge: 86400000 }) 
    ).use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    serverPublic = http.createServer(sourcePublic).listen(80), 
    serverAdmin = http.createServer(sourceAdmin).listen(90); 
+0

可爱。我知道“使用()”比使用眼睛还要多。看起来蒂姆在这里做得很好。 – Christian

+0

最后一个问题,所以堆栈首先处理底部,是否正确? – Christian

+0

不,它从上往下工作......所以你首先“使用”的那个将首先得到invoced。 – DeadAlready

相关问题