【问题标题】:Express file serving only requested from index.html仅从 index.html 请求的快速文件服务
【发布时间】:2017-03-29 01:16:59
【问题描述】:

有什么方法可以通过 get 请求在 Express 中提供 index.html 并发送 index.html 请求的所有外部文件?

例如,这里有一个非常简单的 index.html 页面

<!DOCTYPE html>
<html>
    <head>
        <script src="jquery.js"></script>
    </head>
</html>

现在,app.get('/', function (req, res) {res.sendFile('index.html')} 将发送 index.html,但不会发送 jquery.js。无论如何我可以解决这个问题并允许发送请求的所有外部文件 index.html 吗?我知道我可以使用app.use(express.static(path.join(__dirname, 'public')));,尽管我不希望用户访问公共文件夹中的某些文件。

【问题讨论】:

  • 将匿名文档和受保护文档分开并适当地送达。您已经有了工作代码 - 只需编写 erst
  • @akaphenom 我还是想要在公共目录中
  • 所以这些中间件本质上添加了一个点,它在这些目录中搜索文件,如果找不到完全匹配的文件,则将其返回到中间件中的下一个函数。它可能提供自定义/配置搜索的能力(我不记得了)。或者,您可以查看该代码并编写您自己的版本 - 它应该非常简单。

标签: javascript jquery html node.js express


【解决方案1】:

将您的库文件放在您通过静态文件中间件公开的同一文件夹中。

例如,我的客户端文件包括 index.html 位于名为 wwwroot 的文件夹中。在文件夹中,我有一个文件夹 lib,我的所有依赖项都在其中,因此我的 index.html 将引用来自 lib 的文件,

<!DOCTYPE html>
<html>
    <head>
        <script src="lib/jquery.js"></script>
    </head>
</html>

当然还有通过静态文件中间件app.use(express.static('./wwwroot', options));公开wwwroot

如果您不希望某些文件被公开访问,请从该文件夹中将其删除为rsp,或尝试使用选项,

let options = {
    dotfiles: 'ignore',
    etag: false,
    extensions: ['html', 'ts', 'css', 'js']
}

【讨论】:

  • 如何停止 app.use(express.static(path.join(__dirname, 'public')));从访问文件夹
  • app.use(express.static()) 的重点是暴露文件夹。您的意思是如何防止访问public 内的文件夹?
  • 是的,我就是这个意思。
  • 你看过其他stackoverflow线程吗?例如,您的问题已经在这里讨论过http://stackoverflow.com/questions/28680738/exclude-sub-directory-from-static-files-in-express
  • 是的,我只是在看那个,但我不知道 url 匹配的东西是如何工作的
【解决方案2】:

我不希望用户访问公用文件夹中的某些文件。

如果您不希望用户访问公用文件夹中的某些文件,那么您应该从公用文件夹中删除这些文件。

但是,如果您从公用文件夹中删除这些文件,则不要期望它们可以提供给客户端。

您可以检查请求是否是访问 index.html 的结果,例如检查 Referer 标头或记住用户前一秒访问过 index.html,但一切都很容易绕过。

由于包含在 index.html 中而可以访问的每个文件也可以由用户下载。这就是 Web 的工作方式,没有办法绕过它。

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2018-05-14
    • 2017-07-08
    相关资源
    最近更新 更多