使用Node.js建立网站的最佳做法


79

我想知道如何使用Node.js从头开始开发网站。我明白我怎么能可能做到这一点,但我感兴趣的是最好的设计实践。

我需要这个理论网站来:

  1. 做很多AJAX
  2. 非常简单
  3. 相对较小
  4. 连接到...假设一个MySQL服务器

在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的相似-我正在寻找一种方式来做到这一点是因为简单快速简单越好。

如果答案不简单,我会推荐一本书,我不介意阅读。

我喜欢基于事件的编程,我非常喜欢JavaScript的功能,并且对Node.js感到非常兴奋。我想学习如何从一开始就以正确的方式开发这类东西。


3
我还想指出,使用例如mocha- > github.com/visionmedia/mocha来测试代码非常重要。创建经过良好测试的小型模块化代码(模块)。
阿尔弗雷德·2012年

您还可以看看默认情况下支持并发的Erlang,它比node.js更快,并且比C或Java容易。

Answers:


184

首先,从坏消息开始:由于Node.js是一项相当年轻的技术,我想您会发现创建一个完整的网站以及对其进行维护/操作的过程将与您现在所习惯的完全不同。

Josh3736补充:一旦弄清了Node.js及其各种程序包(Connect,Express)如何工作,我发现您可以非常快速地开发新站点。

Node.js当前存在的粗糙边缘,再加上其快速的开发速度和所涉及的所有模块,可能会使事情变得复杂,并使事情变得不那么简单,快速和直接。

好了,这是个好消息:

节点包管理器,NPM有很多很好的工具和框架,扩大Node.js的裸露的骨头的功能,使其适合于创建一个Web服务器。

最著名的是Express Framework,其中包含运行Web服务器所需的几乎所有内容(包括cookie,会话和路径路由)。此外,Express还支持局部函数,它可以处理页眉和页脚包含的内容。

Express建立在Sencha的Connect之上。Cookies和会话实际上由Connect提供支持。Express是简化您的路由并处理视图/部分的工具。因此,如果您不需要Express附带的所有功能,则可以选择Connect。

如果您想对这些局部使用模板,那么Jade Template Engine可以为您加快处理速度。尽管Josh3736指出Jade较慢且具有明显的空格。在这里可以找到更完整的概述,其中包括他的最爱doT。(我个人socket.io仅将Node.js用于基于基础的应用程序,因此在模板方面,他是比我更好的消息来源)。

可以使用db-mysql模块从Node.js连接到MySQL ,但是如果您不需要它,因为您正在访问连接到已经存在的系统的数据,我建议您使用更多...'现代的方法,即使用大多数Node.js项目似乎使用的NoSQL数据库。通过Mongoose进行MongoDB是流行的方式。

或者,如果它只是存储您感兴趣的对象,那么就选择Redis(无论如何,您可能有时还是需要使用Redis)。

网站建成后,您将必须对其进行部署并确保其继续运行。有许多方法可以做到这一点,例如使用内置的群集支持或使用功能更友好的forevernpm模块。有关更多信息,请参见我的SO问题。

结论

我想知道的是:

询问在Node.js中构建网站的最佳实践是什么,与询问在PHP中构建网站的最佳方法是什么相同:100个开发人员将为您提供100个不同的答案。

NPM拥有各种出色的框架,这些框架可以大大简化涉及的许多任务,但是这完全基于偏好,这才是真正的方法。

正如我已经说过的那样,Node.js仍然是一种相当年轻的技术,因此没有一个框架或其他工具成为“事实上的标准”。对于您尝试执行的大多数操作,可能会有多种选择,并且由于更新Node.js本身和大多数模块的速度很快,因此您希望代码在更新期间使用它们时会中断。您必须跟上。

全部放在一起

就像我说过的那样,Node.js的主要生产用途是能够使用socket.io,因此我没有任何好的生产示例(而且,由于我打算休假,所以我没有也没有时间将它们放在一起)。但是有一些很好的例子:

同样,前进的道路(以及随后的示例)在很大程度上取决于您的最终目标和选择的技术,但是幸运的是,对于所有可用选择,都有大量可用的资源。大多数模块使用文档齐全的GitHub存储库,并包含与最流行的模块结合使用的示例(请参阅/examples/大多数存储库中似乎存在的目录)。

祝好运!(感谢Josh3736纠正了我的错误。)


2
非常感谢,正是我想要的!只是一小段简短的内容,我想知道与在标题中描述的代码相似的某些代码在node.js中看起来如何?逻辑分隔如何工作?假设我将express和jade与railyway.js一起使用。我仍在努力了解我的程序的外观。如果对于(一个简单的)示例,我有一个index.php文件,该文件从数据库加载并显示基本数据,并包括页脚/页眉文件,那么这种代码的外观(优化)如何?再次非常感谢
Benjamin Gruenbaum

6
这是一个很好的答案,但有几点:Express实际上是建立Connect之上的。Cookies和会话实际上由Connect提供支持。Express是简化您的路由并处理视图/部分的工具。Jade非常慢,并且(个人而言)我讨厌空白重要的语言。看一下其他一些模板引擎-我最喜欢的是doT,它很快速
josh3736

4
最后,我不会说使用Node是“一切,但简单,快速,简单” –与您目前所使用的完全不同。了解了Node及其各种程序包(Connect,Express)的工作方式后,我发现您可以非常快速地开发新站点。是的,仍然存在粗糙的边缘,但是总的来说,您可以简单快速地进行操作。
josh3736

2
雷姆科,我也很乐意提及我的最后一条评论,如果您解释我将如何实现所说的using节点(使用最佳实践,即使不是最佳实践),我也会标记为答案。这是困扰我的最后一点,我正为最后一个阶段而苦苦挣扎,再次感谢。
本杰明·格林鲍姆

3
我已经整理了如何使用MEAN堆栈(MongoDb,Express,Angular和Node)创建完整堆栈网站的端到端示例。您可以用您熟悉的任何内容替换Angular或客户端。有人告诉我这是最好的介绍性视频,所以它可能会帮助其他人入门youtube.com/watch?v=AEE7DY2AYvI
Michael Moser 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.