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

2023-12-25

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

/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 and /share处理程序和管理员获取/admin and /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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何运行内存中下载的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 C 加载 EXE 文件并从内存中运行它 https stackoverflow com questions 3553875 load an exe file and run it from me
  • 从 C++ 中查找 python 函数参数

    我正在从 C 调用 python 函数 我想知道是否可以确定参数的数量和这些参数的名称 我已阅读链接如何从 C 语言中查找 Python 函数的参数数量 https stackoverflow com questions 1117164 h
  • 如何从最小最大算法中获取实际移动而不是移动值

    我目前正在为国际象棋编写一个带有 alpha beta 剪枝的极小极大算法 从我见过的所有示例中 极小极大算法将返回一个 int 值 该值表示最佳得分或最佳移动所产生的棋盘状态 我的问题是我们如何返回与分数返回值相关的最佳动作 例如 下面的
  • 如何将 TensorFlow (v. 2) Hub 中预训练的 KerasLayer 与 tfrecords 结合起来?

    我有一个包含 23 个类的 tfrecord 每个类有 35 张图像 总共 805 张 我当前的 tfrecord 读取函数是 def read tfrecord serialized example feature description
  • knockoutjs 检查绑定

    我遇到了问题checked绑定 单击复选框不会更新可见状态 尽管 dependentObservable 指示值已更改 这是 HTML 片段
  • 如何使用标记创建范围滑块并更改填充范围的颜色?

    我已经在某种程度上完成了工作 如下所示 如何实现像这样的范围滑块 slidecontainer width 100 Width of the outside container The slider itself slider webkit
  • 如何创建一个包含每个项目复选框的组合框?

    对 tkinter 和 python 相当陌生 我想知道如何实现一个像这样的按钮 单击按钮下拉列表 所以这是一个组合框 列表的每一行都有一个复选框 最后 如果单击复选框 则运行一个函数 或者 甚至更好 一旦不再删除组合框 就运行一个将项目检
  • 使用 Azure AD 客户端凭据授予流程的 Azure Devops Access

    我已成功通过 Azure AD 进行身份验证并收到访问令牌 我已授予 Azure AD App API 访问 Azure DevOps 的权限 我正在使用 RestSharp Http 客户端进行身份验证 var client new Re
  • 无法将 NumPy 数组转换为张量(不支持的对象类型字典)

    我的方法我认为问题是 history model fit generator train generator epochs epochs steps per epoch train steps verbose 1 callbacks che
  • R 的 UTF-8 编码问题

    尝试解析墨西哥参议院的参议院声明 但在网页的 UTF 8 编码方面遇到问题 这个html清晰可见 library rvest Senate lt html http comunicacion senado gob mx index php
  • neo4j中计算节点深度

    我在 Neo4j 中有这个查询 MATCH sentence Sentence r gt n Word WITH n COUNT r AS c RETURN n c 我的图是一个语言数据库 包含单词及其之间的依赖关系 此查询应返回节点深度
  • 指南针仅在部分运行

    当我尝试通过键入以下内容在命令行上获取我的版本时 compass version 我收到以下错误 Errno ENOENT on line 25 of usr lib ruby vendor ruby compass version rb
  • 使用不同的类型和消息重新引发异常,保留现有信息

    我正在编写一个模块 并希望为它可能引发的异常建立一个统一的异常层次结构 例如 从FooError所有的抽象类foo模块的特定例外 这允许模块的用户捕获这些特定的异常并在需要时明确地处理它们 但是模块引发的许多异常是由于其他一些异常而引发的
  • TypeScript 泛型

    我正在努力解决如何使用 TypeScript 强类型化某些功能 本质上 我有一个函数 它接受 DataProviders 的键 值映射并返回每个数据提供者返回的数据的键 值映射 这是问题的简化版本 interface DataProvide
  • AngularJS 中的动态下拉选择不起作用

    我正在练习 Angular 希望为用户提供从 3 个下拉选择菜单中进行选择的选项 第三个菜单应该是动态的 具体取决于前两个菜单的选择 我的HTML First dropdown menu static
  • 寻找自由港

    我正在用 C 编写一个 FTP 服务器库 因为我需要它 但我找不到任何好的解决方案 我有两个问题 如何IPEndPoint当我这样做时找到一个自由港new IPEndPoint IPAddress Any 0 例如 是否可以从一定范围 例如
  • 如何在 UITextfield 中禁用 UIMenuController 的复制和定义 UIMenuItems

    我正在实施自定义UIMenuController并试图弄清楚 如何合法禁用 复制 和 定义 UIMenuItemsUIMenuController in UITextfield 文本字段不可编辑 我尝试使用以下方法禁用 复制 BOOL ca
  • Angular 2 创建的 Svg 无法缩放

    众所周知 svg element 与viewbox应该自动缩放到样式的尺寸 例如 我们将一个 200 200 的圆放入一个 100 100 的圆中div 在那之前我们先做svg拿走所有div的空间 Svg 已缩放 以便我们可以看到完整的圆
  • Ajax 和状态 302

    我遇到了 ajax 和 或 jQuery ajax 和状态 302 的问题 这就是我正在尝试的 var xhr new XMLHttpRequest xhr open GET some page that I cant change php
  • Node.js 静态文件服务器逻辑(使用 Connect 中间件)

    假设我有以下文件系统结构 app Main application folder app js Server JS file ran by node js public Folder containing files for public