到目前为止,我一直在开发我的客户端应用程序而不使用我自己的服务器,使用Webstorm的内置网络服务器来提供我的内容。
当人们使用Node with Express充当他们的网络服务器时,我经常看到的是关于你是否应该将html文件与节点或客户端代码放在一起的争论。
我理解html或css中包含的javascript文件最好存储在客户端目录中吗?
所以我的第一个问题是,像这样的文件夹结构
app/
client/ js files
server/ node files
您是否应在服务器或客户端目录中包含html页面?
其次:
有时候我会看到人们使用express.static
来表示静态文件,这里的静态文件究竟是什么?今天大多数网站不再是静态文档,而是通过操纵DOM来改变javascript的文件,所以我不认为任何html文件应该被视为静态文件?
据我所知,我使用Node而不是内置网络服务器的唯一优势是,如果我想拥有数据库访问权限。
答案 0 :(得分:29)
今天大多数网站不再是静态文档,而是通过操纵DOM来改变javascript的文件,所以我不认为任何html文件应该被视为静态文件?
您网页的文件本身仍然是静态的。也就是说,您不是使用服务器端代码动态创建它们。在这种情况下,浏览器中发生的事情并不重要......我们的想法是您不需要动态生成这些文件,因为它们的内容不会发生变化。
我理解html或css中包含的javascript文件最好存储在客户端目录中吗?
将文件存储在服务器上的位置并不重要。重要的是,您通常不希望从Node.js应用程序提供静态文件。像express.static
这样的工具只是为了方便起见。有时,您可能会使用低流量应用程序。在这些情况下,使用Node.js应用程序提供文件是完全可以接受的。对于具有良好流量负载的任何设备,最好将静态服务留给真实的Web服务器(如Nginx),因为这些服务器的效率远远高于Node.js应用程序。
您应该在Node.js应用程序中保留您的应用程序代码(提供动态响应的代码,例如API服务器)。
将Node.js应用程序放在像Nginx这样的代理之后也是一个好主意,这样代理就可以处理所有客户端交互(例如喂食慢速客户端)离开Node.js应用程序做最好的事情。但是,在低流量情况下,这并不重要。
答案 1 :(得分:7)
有时我看到人们使用express.static来表示静态文件,这里静态文件的含义究竟是什么?
我相信您指的是这段代码通常会找到一个快速应用的app.js
文件:
app.use(express.static(path.join(__dirname, 'public')));
express.static()
是一个中间件,它将目录名称映射到路径目录以便于查找。通常你会有:
- public
|_ javascripts
|_ stylesheets
|_ images
如果您的javascripts
目录中有脚本,则无需输入包含它的完整路径。只是:
./javascripts/script.js
静态文件最好被视为NPM或Bower之类的文件。它们是您自己的脚本,样式表,图像等。它与动态或静态页面无关。
关于你的第一个问题:
如果您正在使用节点,我个人不确定是否需要这种项目架构。如果您为客户端应用程序使用节点和Ember.js或Angular之类的东西,那么我个人会将我的实际应用程序脚本放在public/javascripts/
目录中。但那就是我。
在一天结束时,选择您喜欢的项目结构,并坚持下去。但是,如果其他人正在从事该项目,请坚持使用共同的惯例。它让生活更轻松。