我想知道如何用Node.js从头开始开发一个网站。 我理解我可以可能这样做,但我对最佳设计实践感兴趣。
我需要这个理论网站:
在PHP中,构建一个非常小的网站非常简单 - 我在Apache和MySQL服务器上设置PHP然后执行以下操作:
includes/db/
,其中包含用于连接数据库的connect.php,具有常见数据库相关功能的文件等等。includes/layout/
有像footer.php,header.php和其他布局相关的东西includes/users/
处理与用户相关的操作然后PHP让你构建页面并将这些文件包含在一起形成一个网站 - 我可以这样:
<?php
require_once('inclues/users/user_session.php');
require_once('inclues/db/connect.php');
require_once('inclues/design/header.php')
?>
// Other php or html or related content relating to the page
<?php
require_once('inclues/.../footer.php');
?>
我想知道Node.js中可能有什么相似之处 - 我正在寻找一种方法来实现这一目标,即简单,快速和直接< / strong>尽可能。
如果答案不简单,我会喜欢书推荐,我不介意阅读。
我喜欢基于事件的编程,我非常喜欢JavaScript的能力,我对Node.js感到非常兴奋。我想学习如何从一开始就以正确的方式开发这类东西。
答案 0 :(得分:184)
从坏消息开始:由于Node.js是一种非常年轻的技术,我认为你会发现创建一个完整的网站并维护/操作它的过程将与你的非常不同。目前习惯了。
Josh3736补充说:一旦你弄清楚Node.js及其各种软件包(Connect,Express)是如何工作的,我发现你可以很快开发新网站。
Node.js中当前存在的粗糙边缘,加上其开发的快节奏和所涉及的所有模块都会使事情复杂化,并使事情变得不那么简单,快速和直接。
有了这个,这是好消息:
Node Package Manager, NPM有很多很好的工具和框架来扩展Node.js的基本功能,使其适合创建网络服务器。
最值得注意的是Express Framework,其中包含运行网络服务器所需的几乎所有内容(包括Cookie,会话和路径路由)。另外Express支持partials,它负责你的页眉和页脚包含。
Express构建于Sencha's Connect之上。 Cookie和会话实际上由Connect提供支持。 Express可以简化您的路由并处理视图/部分。因此,如果你不需要Express附带的所有铃声和口哨,你可以选择连接。
如果您想为这些局部使用模板,Jade Template Engine可以为您加快速度。虽然Josh3736指出翡翠是缓慢而且具有空白重要性。可以找到更完整的概述here,其中包括他最喜欢的doT。 (我个人仅将Node.js用于基于socket.io
的应用程序,因此在模板方面,他比我更好。
你可以使用db-mysql模块从Node.js连接到MySQL,但是如果你不需要它,因为你正在访问连接到已经存在的系统的数据,我建议使用更多......'现代'方法,即使用NoSQL数据库,因为大多数Node.js项目似乎都这样做。 MongoDB通过Mongoose是流行的方式。
或者如果它只是存储您感兴趣的对象,那么只需转到Redis(无论如何您可能需要它)。
一旦您的网站完成,您将必须部署它并确保它继续运行。有很多方法可以实现,例如使用内置群集支持或使用功能更友好的forever
npm模块。 See this SO question of mine for more information.
<强>结论强>:
我想要的是:
询问在Node.js中构建网站的最佳做法是,与询问在PHP中构建网站的最佳方式是一样的:100位开发人员会给出100个不同的答案。
NPM拥有各种优秀的框架,可以大大简化所涉及的许多任务,但这一切都基于偏好,哪一种是真正的方法。
正如我所说,Node.js仍然是一种非常年轻的技术,所以没有任何框架或其他工具已经成为“事实上的标准”;对于你正在尝试做的大多数事情,可能有各种各样的选择,并期望你的代码在更新期间使用大部分代码时会中断,因为Node.js本身和大多数模块的开发都是快节奏的。你必须跟上。
全部放在一起:
正如我所说,我对Node.js的主要生产用途是能够使用socket.io
,所以我没有任何好的生产示例(而且我将要离开一个当之无愧的假期我没有时间把它们放在一起。但是有一些很好的例子:
同样,前进的方式(以及随后的示例)在很大程度上取决于您的最终目标和所选择的技术,但幸运的是,有足够的资源可用于所有可用的选择。大多数模块使用记录良好的GitHub存储库,并包含与最流行模块组合的示例(请参阅大多数存储库中似乎存在的/examples/
目录)。