Node.js静态文件服务器逻辑(使用Connect中间件)

假设我有以下文件系统结构:

/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/ (可能是一个域或者静态IP)访问,也可以通过http://host:90/通过本地networking访问。

虽然端口90的东西不会损坏系统(这只是一个输出屏幕),我宁愿人们不能从外部访问它(很容易通过确保路由器和服务器之间没有端口90转发)。

连接中间件是可堆叠的,所以你可以通过简单地堆叠所有想要的处理程序来实现想要的结果。 公共服务器获取/ public/ share处理程序,pipe理员获取/ admin/ share处理程序。

因此,请求公共服务器将search/公共文件夹下的资源,如果没有find,然后search/共享文件夹下。 而pipe理员服务器也是这样做的。

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