假设我有以下文件系统结构:
/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/
通过本地网络访问。
虽然端口 90 上的东西不会损坏系统(它只是一个输出屏幕),但我宁愿人们无法从外部访问它(通过确保路由器和路由器之间没有端口 90 转发来轻松完成)服务器)。
Connect 中间件是可堆叠的,因此您只需将所有想要的处理程序依次堆叠即可实现所需的结果。公共服务器获取 /public 和 /share 处理程序,管理员获取 /admin 和 /share 处理程序。
因此,对公共服务器的请求将在 /public 文件夹下搜索资源,如果找不到,则在 /share 文件夹下搜索。管理服务器也这样做。
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);