【问题标题】:Resources not loading in express资源未在快递中加载
【发布时间】:2015-12-29 05:50:51
【问题描述】:

假设我通过express 服务器在根目录中提供以下index.html 文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<h1>Hello</h1>

<script src="/public/system.js"></script>
<script src="/public/config.js"></script>
<script>System.import("app/main")</script>
</body>
</html>

system.jsconfig.js 都在公共目录文件夹中。

要让index.html 加载这些文件,我必须在我的app.js 文件中包含以下行,以便可以在公共文件夹中搜索请求:

app.use(express.static(path.join(config.root, 'public')));

为什么会这样?为什么index.html 不能正确引用没有上述行的文件,因为资源的src 路径是正确的? app/main 也是如此。 index.html 使用的每个资源是否真的必须通过app.use() 静态提供?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    默认情况下,node.js Web 服务器不提供任何文件。因此,仅仅因为您有一个服务于index.html 的路由,并不意味着任何其他文件都由 node.js 提供服务。 node.js 不像其他 Web 服务器,它们首先将自己视为文件服务进程,然后将其视为应用程序服务器。 node.js 为您提供完全控制权,默认情况下它不提供任何文件。如果您希望它为静态文件(例如脚本文件)目录提供服务,那么单个app.use(express.static(...)) 代码行将导致它为特定目录中的所有文件提供服务。

    如果您问为什么服务于 index.html 的同一静态路由不服务于其他两个文件,那么这只是路径和文件位置没有正确排列而无法找到的情况。由于您尚未真正向我们提供有关您的文件系统结构或路径结构的完整详细信息,因此我们无法提供您应该更改哪些内容的确切细节。

    如果 system.js 和 config.js 与 index.html 位于同一目录中,那么您应该从它们的 script 标签前删除路径。如果它们不在同一个目录中,那么您可能需要另一个覆盖其他路径/目录组合的 app.use(express.static(...))

    是否真的必须为 index.html 使用的每个资源提供服务 静态通过 app.use()?

    不,如果它与 index.html 位于同一位置并且由相同的路径引用,并且如果您使用的是覆盖整个目录的 express.static(),则不会。

    您希望 node.js 服务器发送的每个资源都必须被服务器中的某些路由专门覆盖。某些路由可能会覆盖许多文件或整个文件目录,但您要处理的每个请求都必须由路由覆盖。

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2012-06-25
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多