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 感到非常兴奋。我想从一开始就学习如何以正确的方式开发这种东西。

4

1 回答 1

184

先从坏消息说起:由于Node.js是一项相当年轻的技术,我想您会发现创建一个完整的网站并维护/操作它的过程将与您目前习惯的完全不同。

Josh3736补充说:一旦你弄清楚 Node.js 及其各种包(Connect、Express)是如何工作的,我发现你可以非常快速地开发新网站。

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

把它排除在外,这是个好消息:

Node Package Manager,NPM有很多很好的工具和框架来扩展 Node.js 的基本功能,使其适合创建 web 服务器。

最值得注意的是Express 框架,它包含运行网络服务器所需的几乎所有内容(包括 cookie、会话和路径路由)。此外,Express 支持 partials,它会处理您的页眉和页脚包括在内。

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

如果您喜欢为这些部分使用模板,Jade 模板引擎可以为您加快速度。尽管Josh3736指出 Jade 速度慢且对空格很重要。可以在此处找到更完整的概述,其中包括他最喜欢的doT。(我个人仅将 Node.js 用于socket.io基于应用程序,因此在模板方面他是比我更好的来源)。

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

或者,如果它只是存储您感兴趣的对象,则只需使用Redis(无论如何您可能会在某个时候需要它)。

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

结论

我想要得到的是:

询问在 Node.js 中构建网站的最佳实践是什么,与询问在 PHP 中构建网站的最佳方法是什么大致相同:100 个开发人员会给你 100 个不同的答案。

NPM 拥有各种出色的框架,这些框架极大地简化了所涉及的许多任务,但这一切都取决于偏好哪一个才是真正要走的路。

正如我所说,Node.js 仍然是一项相当年轻的技术,因此还没有任何框架或附加工具成为“事实上的标准”。对于您尝试做的大多数事情,可能有各种替代方案,并且希望您的代码在更新期间使用它们中的大部分时会中断,因为 Node.js 本身和大多数模块的开发节奏很快。你必须跟上。

把它们放在一起

正如我所说,我对 Node.js 的主要生产用途是能够使用socket.io,所以我没有任何好的生产示例(而且我即将离开一个当之无愧的假期,我没有'也没有时间把一个放在一起)。不过也有一些很好的例子:

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

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

于 2012-07-03T13:50:21.890 回答