使用Node.js构建网站的最佳实践

79

我想知道如何使用Node.js从零开始开发一个网站,我知道我可以做到,但我对最佳设计实践感兴趣。

我需要这个理论上的网站:

  1. 进行大量的AJAX
  2. 非常简单直观
  3. 相对较小
  4. 连接到...假设是MySQL服务器

在PHP中,构建一个相当小的网站非常简单-我在Apache上设置了PHP和MySQL服务器,然后像这样做:

  • includes/db/,其中有connect.php连接到db的文件,一个包含常见db相关功能的文件等等
  • includes/layout/ 具有页脚.php,页眉.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 -> https://github.com/visionmedia/mocha测试您的代码非常重要。创建小型、经过充分测试的模块化代码(模块)。 - Alfred
您也可以看看 Erlang,它默认支持并发,比 node.js 更快,比 C 或 Java 更容易。 - user3644644
1个回答

184
首先说坏消息:由于Node.js是一种相当年轻的技术,我认为你会发现创建一个完整的网站并进行维护/操作的过程与你目前所习惯的非常不同。 Josh3736 补充道:一旦你弄清楚了Node.js及其各种包(Connect、Express)的工作原理,我发现你可以非常快速地开发新站点。 目前存在于Node.js中的一些粗糙边缘,再加上它的快速发展和所有模块都可能会使事情变得更加复杂,不如你所愿的那么简单、快速和直接。
好消息是: Node Package Manager, NPM有很多好的工具和框架来扩展Node.js的基本功能,使其适合创建Web服务器。
最值得一提的是Express框架,它几乎包含了你运行Web服务器所需的一切(包括cookies、sessions和路径路由)。此外,Express还支持partials,可以处理你的头部和页脚包含。
Express基于Sencha的Connect构建。Cookies和sessions实际上是由Connect提供支持的。Express简化了路由并处理视图/部分视图。因此,如果你不需要Express带来的所有功能,你可以选择使用Connect。
如果您想为这些局部使用模板,Jade Template Engine可以加快速度。虽然Josh3736指出Jade很慢,且空格很重要。更完整的概述可在这里找到,其中包括他最喜欢的doT。(我个人仅在基于socket.io的应用程序中使用Node.js,因此在模板方面,他比我更好)。
您可以使用db-mysql模块从Node.js连接到MySQL,但如果您不需要这样做,因为您正在访问与已有系统连接的数据,我建议使用更...“现代”的方法,即使用NoSQL数据库,因为大多数Node.js项目似乎都在使用。MongoDB通过Mongoose是流行的选择。
或者,如果您只对存储对象感兴趣,那么只需选择Redis(无论如何,您可能在某个时候都需要它)。
一旦您的网站完成,您需要部署它并确保它持续运行。有许多方法可以做到这一点,例如使用内置的集群支持或使用更具功能性的forever npm模块。查看我的这个SO问题以获取更多信息。 结论:
我想说的是:
询问在Node.js中构建网站的最佳实践与询问在PHP中构建网站的最佳方式大致相同:100个开发人员会给出100个不同的答案。
NPM拥有各种优秀的框架,大大简化了许多任务,但选择哪一个才是正确的取决于个人偏好。
正如我所说,Node.js仍然是一种相当年轻的技术,因此尚未出现任何框架或附加工具作为“事实标准”;对于您要尝试的大多数事情,可能存在各种替代方案,并且预计在更新期间使用它们时,您的代码将会崩溃,因为Node.js本身和大多数模块的开发都是快节奏的。您必须跟上。

将所有内容组合在一起:

正如我所说,我的主要生产使用Node.js是为了能够使用socket.io,因此我没有任何好的生产示例(而且由于我即将度假,也没有时间制作一个)。不过有一些很好的例子:

再次强调,选择的方法(以及随后要遵循的示例)取决于您的最终目标和所选择的技术,但幸运的是,对于所有可用的选择,都有大量资源可用。大多数模块使用经过充分记录的GitHub存储库,并结合最流行的模块提供示例(请参见大多数存储库中似乎存在的/examples/目录)。
(感谢Josh3736纠正我的错误。)

2
非常感谢,这正是我想要的!只有一个简短的问题,我想知道类似于标题中描述的代码在node.js中可能会是什么样子?逻辑上的分离会如何工作?假设我使用带有railway.js的express和jade。我仍然很难理解我的程序会是什么样子。例如,如果我有一个index.php文件,它从数据库加载和显示基本数据,并包括页脚/页眉文件,那么这种代码会是什么样子(最好是)?再次感谢 - Benjamin Gruenbaum
6
这是一个很好的回答,但是有几个要点:Express实际上是在Connect之上构建的。Cookies和sessions实际上是由Connect提供支持的。Express简化了路由和处理视图/局部视图。Jade非常慢,并且(个人感觉)我讨厌空格相关的语言。请查看其他一些模板引擎--我的最爱是doT,它非常快。链接为 https://github.com/joyent/node/wiki/Modules#wiki-templating - josh3736
4
最后,我不会说使用Node是“除了简单、快速和直观之外的一切”,它只是与你目前所用的工具非常不同。一旦你弄清楚了Node及其各种包(Connect、Express)的工作原理,我发现你可以非常快速地开发新网站。是的,仍然有一些问题需要解决,但总体上你可以简单而快速地完成任务。 - josh3736
2
Remco,如果你能参考我上一条评论来解释如何使用Node.js实现所说的内容(使用良好的甚至不是最佳的实践),我将标记此答案。这是最后一个困扰我的部分,我一直在努力克服这最后一关,再次感谢。 - Benjamin Gruenbaum
3
我已经编写了一个端到端的示例,展示如何使用MEAN堆栈(MongoDb、Express、Angular和Node)构建全栈网站。您可以用您熟悉的其他客户端代替Angular。有人告诉我这是目前最好的入门视频,或许它能帮助其他人开始学习。视频链接:https://www.youtube.com/watch?v=AEE7DY2AYvI - Michael Moser
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接