一个包含 node.js 和 mongodb 的整个网站?

Posted

技术标签:

【中文标题】一个包含 node.js 和 mongodb 的整个网站?【英文标题】:An entire website with node.js and mongodb? 【发布时间】:2011-08-19 18:29:01 【问题描述】:

我已经使用 phpmysql 作为后端构建了多个网站,并且相信我对两者都相当熟悉。然而,在研究我的新网站时,我遇到了 node.js 和 mongodb(以及 socket.io,因为该网站将包含聊天)。

我决定使用 node.js 和 mongodb 来运行聊天 - 但不知道我是否应该只用这两件事来做整个网站? 既然我要运行一个节点服务器,我应该只运行另一个(单独的)一个托管网站的服务器吗?或者这是一个坏主意? - 稳定吗? 我可以在 PHP 中进行编程并且仍然使用 mongodb - 但节点不会更快吗?

还有一个问题: 我计划使用 ajax 来处理页面上的所有帖子 - 但由于我已经使用 socket.io 进行聊天 - 我应该使用它来完成我的所有帖子请求吗? 对于 ajax,我计划使用 jQuery(也适用于所有前端效果)。

【问题讨论】:

【参考方案1】:

不知道我是否应该这样做 有这两个东西的整个网站?

如果你想学习 node.js,没有什么比编码更好的了。

因为我要运行节点服务器 无论如何我应该再跑一个 (单独)一个托管网站?

您可以使用现有服务器并在其他空闲端口(o)上运行您的 node.js 应用程序。我认为学习节点不需要专用机器。

稳定吗?

即使是 node.js 的版本也是稳定的版本,但是在 1.0 版本冻结之前,它的 API 可能会发生重大变化。

我可以用 PHP 进行编程,并且 仍在使用 mongodb - 但不会 节点会更快吗?

它很可能(并且肯定)会。

我已经计划使用 ajax 来处理所有 页面上的帖子 - 但因为我 已经准备好使用 socket.io 来聊天了—— 我应该使用 那个?

我建议坚持 MVC 模型并使用 express,因为如果您将 socket.io 用于经典内容,您可能会遇到很多耗时的问题。 Socket.io 就是用于实时功能和与之相关的东西。

【讨论】:

Express 不提供任何 MVC。它只提供路由和视图引擎。 @Raynos:那么路由和视图引擎不是模型-视图-控制器功能的任何部分吗? @yojimbo7 它们是 MVC 的一部分。但这不是 MVC 模型。它给你的只是一些路由的糖和一个强大的模板引擎。没有模型,也没有控制器。 @Raynos:好的,我更正了 MVC 模型部分。您可以使用路由作为控制器功能的基础,模型高度依赖于您选择的持久性系统。也就是说,Express 仍然为 MVC 模型提供了基础。 我个人不会走那么远。它提供了一种在高级别处理请求和响应的方法。它独立于 MVC。【参考方案2】:

已经有一些可靠的 node.js 网络框架,特别是查看Express。这是一篇非常好的文章,概述了构建 node.js 网站的一些经验教训:

What it’s like building a real website in Node.js

关于您的第二个问题,最好还是将 AJAX 处理程序和 HTTP 与 jQuery 结合使用。我不确定 jQuery 是否支持通过原始 TCP 套接字进行回调。

【讨论】:

没有理由不能使用 socket.io 作为 TCP 传输并编写自己的协议。您还可以升级到 now 并将其用于双向 RPC。这些都是ajax的替代品。只是没有那么“熟悉”。 非常感谢您的回答 - 我一定会在开始编程之前查看 Express!【参考方案3】:

node.js + express + jade + stylus + jQuery 是我的首选环境。

使用forever 自动重启服务器我从来没有遇到过任何真正的正常运行时间问题,即使我经常遇到导致服务器崩溃的错误。

至于socket.io + jQuery,他们相处得很好,但它不像express + jQuery 组合那么自然。我会坚持对大多数事情进行 ajax 调用。

【讨论】:

express 和 socket.io 是分开的。在客户端上使用 jQuery 或 mootools 或 dojo 或 YUI 也无关紧要。 Express 旨在为您提供路由和视图引擎控制。 socket.io 允许您在客户端和服务器之间建立 TCP 双向流。【参考方案4】:

Node.JS 仍然有点像狂野的西部,但它正在改进。这是一个与 php 编码非常不同的模型,但它非常适合许多网站。您可能希望使用像 BackBone.js 之类的东西来使用更胖的客户端来做瘦服务器(公开 REST API 和您的 websocket 端点)以保持交互干净。

在 node 中完成整个事情的最大好处是,您不会在 php 和 js 之间使用重复的代码来处理 DB 或两者都需要的任何其他服务。 Node.JS 在处理大量并发请求方面也非常出色。

祝你好运

【讨论】:

您介意告诉我BackBone.js 能为我做什么吗? - 抱歉,我之前没有太多的套接字编程经验。实际上主要是直接的 PHP 网络编程。 客户端模型视图控制器。当您的模型通过套接字等不断更新时,将其与所有 DOM/视图操作分离是非常有帮助的。使用 node 和胖 javascript 客户端与直接使用 PHP 有很大不同(特别是如果您没有使用带有 PHP 的 MVC 样式框架),但是通过发挥其优势并遵循良好的开发实践,您可以创建非常高质量的软件。

以上是关于一个包含 node.js 和 mongodb 的整个网站?的主要内容,如果未能解决你的问题,请参考以下文章

Node.JS + MongoDB聚合从MongoDB中的DataBase中查找数组中的数组

使用 mongoose(Node.js) 在 MongoDB 中搜索

Node.js 和 MongoDB 如果存在文档完全匹配,则忽略插入

[Node.js, MongoDB/Mongoose]:使用 indexOf 生成唯一的标签列表非常慢

通过 Mongoose、Node.js、MongodB 中的特定属性查找嵌入式文档

如何使用node.js中的循环将表单数据保存为对象和对象数组到mongodb?