“提供静态文件”到底是啥意思?
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/
目录中。但这只是我。
最后,选择您喜欢的项目结构并坚持下去。但是,如果其他人正在从事该项目,请坚持共同的约定。它让生活更轻松。
【讨论】:
首先:我建议在路径前加上__dirname
和path.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以上是关于“提供静态文件”到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章