【问题标题】:Node.js static file server logic (using Connect middleware)Node.js 静态文件服务器逻辑(使用 Connect 中间件)
【发布时间】:2012-10-02 07:11:16
【问题描述】:

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

/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 转发来轻松完成路由器和服务器)。

【问题讨论】:

    标签: node.js connect middleware static-files httpserver


    【解决方案1】:

    Connect 中间件是可堆叠的,因此您可以通过简单地将所有想要的处理程序一个接一个地堆叠来获得想要的结果。公共服务器获取 /public/share 处理程序管理员获取 /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() 的意义远不止眼前。看来蒂姆在这里做得很好。
    • 不,它是自上而下工作的......所以你首先“使用”的那个会首先被调用。
    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2013-12-08
    • 2020-05-18
    • 2018-08-31
    相关资源
    最近更新 更多