假设我通过index.html
服务器提供以下express
文件,该文件位于根目录中。
<!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.js
和config.js
都在公共目录文件夹中。
要让index.html
加载这些文件,我必须在app.js
文件中包含以下行,以便可以在公共文件夹中搜索请求:
app.use(express.static(path.join(config.root, 'public')));
为什么会这样?为什么不能index.html
正确引用没有上述行的文件,因为资源的src
路径是正确的?同样适用于app/main
。是否必须通过app.use()
静态提供每个资源index.html使用?
答案 0 :(得分:1)
默认情况下,node.js Web服务器不提供任何文件。因此,仅仅因为您有一条服务index.html
的路由,这并不意味着node.js提供任何其他文件。 node.js与其他Web服务器不同,它们首先将自己视为文件服务进程,其次是app服务器。 node.js为您提供完全控制,默认情况下它不提供任何文件。如果您希望它提供静态文件(例如脚本文件)的目录,那么一行app.use(express.static(...))
代码将使它能够为特定目录中的所有文件提供服务。
如果您问为什么为index.html提供服务的相同静态路由不能为其他两个文件提供服务,那么这只是路径和文件位置不能正确排列的情况。由于您尚未真正向我们提供有关文件系统结构或路径结构的完整详细信息,因此我们无法提供有关您应更改内容的具体信息。
如果system.js和config.js与index.html位于同一目录中,那么您应该从其脚本标记前面删除路径。如果它们不在同一目录中,那么您可能需要另一个app.use(express.static(...))
来覆盖其他路径/目录组合。
是否必须为每个资源index.html提供服务 静态地通过app.use()?
如果它与index.html位于同一位置并且由相同的路径引用,并且如果您使用覆盖整个目录的express.static()
,则不会。
您希望node.js服务器发送的每个资源必须由服务器中的某个路由专门覆盖。某些路径可能涵盖许多文件或整个文件目录,但您要工作的每个请求都必须由路径覆盖。