Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js静态文件服务器逻辑(使用连接中间件)_Node.js_Connect_Middleware_Static Files_Httpserver - Fatal编程技术网

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

Node.js静态文件服务器逻辑(使用连接中间件),node.js,connect,middleware,static-files,httpserver,Node.js,Connect,Middleware,Static Files,Httpserver,假设我有以下文件系统结构: /app/Main应用程序文件夹 /node.js运行的app.js服务器js文件 /包含公共网站文件的公用文件夹(端口80) /index.html /js/ /game.js /包含本地网络系统使用的文件的管理员/文件夹(端口X) /index.html /js/ /screen.js /包含公共网站或lan使用的文件的共享/文件夹 /js/ /jquery.js 最终结果是admin/index.html看起来像: 也就是说,我正在从不同的位置加载两个文件

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

/app/Main应用程序文件夹
/node.js运行的app.js服务器js文件
/包含公共网站文件的公用文件夹(端口80)
/index.html
/js/
/game.js
/包含本地网络系统使用的文件的管理员/文件夹(端口X)
/index.html
/js/
/screen.js
/包含公共网站或lan使用的文件的共享/文件夹
/js/
/jquery.js
最终结果是
admin/index.html
看起来像:


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

下面是我目前使用的代码:

var connect=require('connect'),
sourcePublic=connect()。请使用(
static(uuu dirname+/public',{maxAge:86400000})
),
sourceAdmin=connect()。请使用(
static(uuu dirname+/admin',{maxAge:86400000})
),
sourceShare=connect()。使用(
static(uuu dirname+'/share',{maxAge:86400000})
),
serverPublic=http.createServer(sourcePublic).listen(80),
serverAdmin=http.createServer(sourceAdmin).listen(90);
//好的,我如何使用sourceShare?
PS:此系统应可通过
http://host/
(可能是域或静态ip)并可通过
http://host:90/


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

连接中间件是可堆叠的,因此,您只需将所有需要的处理程序依次堆叠即可获得想要的结果。Public server获得/Public和/share处理程序,admin获得/admin和/share处理程序

所以对公共服务器的请求将在/public文件夹下搜索资源,如果在/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);

可爱。我知道,
.use()
比我想象的要多得多。看起来蒂姆在这里做得很好。不,它是自上而下工作的。。。因此,您首先“使用”的将首先收到发票。