“提供静态文件”到底是啥意思?

Posted

技术标签:

【中文标题】“提供静态文件”到底是啥意思?【英文标题】:What exactly does 'serving static files' mean?“提供静态文件”到底是什么意思? 【发布时间】:2015-05-09 05:48:37 【问题描述】:

到目前为止,我一直在开发我的客户端应用程序,而没有任何我自己的服务器在其后面运行,使用 Webstorm 的内置网络服务器来提供我的内容。

当人们将 Node 与 Express 一起用作他们的网络服务器时,我经常看到的是关于是否应该将 html 文件与节点或客户端代码一起放置的争论。

我了解 html 或 css 中包含的 javascript 文件最好存储在客户端目录中?

所以我的第一个问题是,像这样的文件夹结构

app/
  client/ js files
  server/ node files

您应该将 html 页面包含在您的服务器或客户端目录中吗?

其次:

有时我看到人们将express.static 用于静态文件,这里的静态文件到底意味着什么?现在大多数网站不再是静态文件,而是通过 javascript 操作 DOM 来更改的文件,所以我认为任何 html 文件都不应被视为静态文件?

据我所知,使用 Node 而不是内置网络服务器的唯一优势是如果我想访问数据库。

【问题讨论】:

静态文件通常是脚本、CSS 文件、图像等文件,它们不是服务器生成的,但必须在请求时发送到浏览器。如果 node.js 是您的 Web 服务器,默认情况下它不提供任何静态文件,您必须将其配置为提供您希望它提供的静态内容。当您想使用 node.js 及其技术来生成动态页面、提供 API 等时,您可以使用它作为您的 Web 服务器...... 静态文件是在加载时不会生成的文件 我明白了,这对我来说更有意义,所以我应该也将我的 html 文件放在我的节点目录中? 【参考方案1】:

如今大多数网站不再是静态文件,而是通过 javascript 操作 DOM 来更改的文件,所以我认为任何 html 文件都不应该被视为静态文件?

页面本身的文件仍然是静态的。也就是说,您不是使用服务器端代码动态创建它们。在这种情况下,浏览器中发生的事情无关紧要......我们的想法是您不需要动态生成这些文件,因为它们的内容不会改变。

我了解 html 或 css 中包含的 javascript 文件最好存储在客户端目录中?

您在服务器上存储文件的位置并不重要。重要的是您通常不希望从 Node.js 应用程序中提供静态文件。 express.static 之类的工具只是为了方便。有时,您的应用程序可能流量较低。在这些情况下,使用 Node.js 应用程序提供文件是完全可以接受的。对于任何具有良好流量负载的东西,最好将静态服务留给真正的 Web 服务器,例如 nginx,因为这些服务器比您的 Node.js 应用程序高效得多。

您应该在 Node.js 应用程序中保留您的应用程序代码(提供动态响应的代码,例如 API 服务器)。

将您的 Node.js 应用程序放在 Nginx 之类的代理之后也是一个好主意,这样代理就可以处理所有客户端交互(例如用勺子喂食慢速客户端),让您的 Node.js 应用程序自行处理做得最好。不过,在交通流量低的情况下,这并不重要。

【讨论】:

谢谢你,你的回答让我更清楚了 我真的很喜欢“你可以但不想”的部分。大多数人会说它可以将它用于一切以保持一致和简单。【参考方案2】:

有时我看到人们将 express.static 用于静态文件,这里的静态文件到底意味着什么?

我相信你指的是这段代码,通常是在一个 express 应用的app.js 文件中找到的:

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

express.static() 是一个将目录名映射到路径目录以便于查找的中间件。通常你会有:

- public
  |_ javascripts
  |_ stylesheets
  |_ images

如果您的javascripts 目录中有脚本,则无需输入完整路径即可包含它。只是:

./javascripts/script.js

最好将静态文件视为不包含在 NPM 或 Bower 之类的文件中的文件。它们是您自己的脚本、样式表、图像等。它与页面是动态还是静态无关。

关于你的第一个问题:

如果您使用的是 node.js,我个人不确定是否需要这种项目架构。如果您将节点和Ember.js 或Angular 之类的东西用于您的客户端应用程序,那么我个人会将我的实际应用程序脚本放在public/javascripts/ 目录中。但这只是我。

最后,选择您喜欢的项目结构并坚持下去。但是,如果其他人正在从事该项目,请坚持共同的约定。它让生活更轻松。

【讨论】:

首先:我建议在路径前加上__dirnamepath.join()path.join() 将确保正确的构造。 ./src/client./tmp 路径可以工作,但 ./ 只是指根,所以它毫无意义(我认为)。 ./src/client/index.html 不应该工作,因为它指向一个文件,而不是一个目录。如果您已经拥有./src/client,那么您只需调用./index.html 而不是完整的./src/client/index.html 即可引用该文件。 express.static() 只是帮助更轻松地引用文件路径。 来自文档:expressjs.com/guide/using-middleware.html#middleware.built-in

以上是关于“提供静态文件”到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

使用 express 提供静态文件的最简单方法是啥?

如何使用 Nginx 提供 Flask 静态文件?

authTokenType 到底是啥意思?

在上下文(非)敏感分析中,“上下文”到底是啥意思?

从 django 静态文件提供服务并上传到 heroku 时无法找到反应静态文件

锁文件解释,每一行到底是啥意思?纱线锁