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

Posted

技术标签:

【中文标题】使用 Node.js 构建网站的最佳实践【英文标题】:Best practices of building a website using Node.js 【发布时间】:2012-07-03 22:18:55 【问题描述】:

我想知道如何使用 Node.js 从头开始​​开发网站。 我了解我如何可能做到这一点,但我对最佳设计实践感兴趣。

我需要这个理论网站来:

    大量使用 AJAX 要直截了当 相对较小 连接到...假设是 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 中可能有什么相似之处 - 我正在寻找一种方法来实现这一点,即 simplefaststraightforward 尽可能。

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

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

【问题讨论】:

我还想指出,使用例如 mocha -> github.com/visionmedia/mocha 测试您的代码非常重要。创建经过良好测试的小型模块化代码(模块)。 你也可以看看 Erlang,它默认支持并发,比 node.js 更快,比 C 或 Java 更容易。 【参考方案1】:

从坏消息开始:由于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 附带的所有花里胡哨,您可以选择 Connect。

如果您喜欢为这些部分使用模板,Jade Template Engine 可以为您加快速度。尽管 Josh3736 指出 Jade 速度慢且空格很重要。可以在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,所以我没有任何好的生产示例(而且我即将离开-当之无愧的假期我也没有时间把一个放在一起)。不过也有一些很好的例子:

Setup and deployment using Express and Jade A very complete blog example using Express, Jade and MongoDB Combining Restify (an extension of Express), Backbone.js and Mongoose

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

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

【讨论】:

非常感谢,正是我想要的!还有一件事,我想知道一些类似于我在标题中描述的代码的代码在 node.js 中的外观如何?逻辑分离如何工作?假设我将 express 和 jam 与 railyway.js 一起使用。我仍然在努力理解我的程序会是什么样子。如果对于(一个简单的)示例,我有一个 index.php 文件,该文件从数据库加载和显示基本数据并包含页脚/页眉文件,那么这种代码(最佳)会是什么样子?再次,非常感谢 这是一个很好的答案,但有几点:Express 实际上是在 Connect 之上构建的。 Cookie 和会话实际上由 Connect 提供支持。 Express 可以简化您的路由并处理视图/部分。 Jade 非常很慢,而且(就个人而言)我讨厌空格重要的语言。看看some of the other templating engines——我最喜欢的是doT,也就是fast。 最后,我不会说使用 Node 是“除了简单、快速和直接之外的一切”——它与您目前所习惯的完全不同。一旦您了解了 Node 及其各种包(Connect、Express)的工作原理,我发现您可以非常快速地开发新站点。是的,仍然有粗糙的边缘,但总的来说你可以简单快速地做事。 Remco,我也很想参考我的最后一条评论,如果你解释我将如何实现所说的使用节点(使用好的,即使不是最好的,实践)我会标记这个答案.这是困扰我的最后一点,我在最后阶段苦苦挣扎,再次感谢。 我已经整理了这个端到端的示例,说明如何使用 MEAN 堆栈(MongoDb、Express、Angular 和 Node)创建一个完整的堆栈网站。你可以用你熟悉的任何东西替换 Angular 或客户端。有人告诉我这是最好的介绍视频,所以也许它会帮助其他人入门youtube.com/watch?v=AEE7DY2AYvI

以上是关于使用 Node.js 构建网站的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

构建 Node.js 和 Socket.io 应用程序的最佳实践?

Heroku 最佳实践时钟与 node.js

在 Node.js 中管理数据库连接,最佳实践?

Node.js 上 MongoDB 连接的最佳实践是啥?

52合1Node.js 最佳实践大合集

最佳实践 beanstalkd (queue) 和 node.js