Node.js是否是构建完整网站的好选择?

20

我在想是否使用Node.js(express.js)是建立完整网站的最佳选择。我一直在使用Rails + Node.js,不知道这仍然是最好的选择,还是应该完全转向Node.js。

是否有使用Node.js完全构建的网站?我想它肯定缺少Rails提供的许多功能。


1
Rails和Node实际上是为两个不同的目的而设计的。 - basicxman
2
Express.js旨在改变这一点。我只是想知道它是否值得。 - donald
2
这要看情况。你对node.js有多熟悉?你需要Rails的多少高级/抽象功能?考虑到你提出的问题数量,你现在一定是个专家了,所以可以100%使用node.js。 - Raynos
4个回答

27

我想它一定缺少了很多Rails所提供的功能。

我列出了一个简短的清单,但我想知道你可能会缺少什么,而且我几乎可以确定我们可以在node.js上为你提供一些替代方案。


模块

Node.js已经非常完整,我认为你可以仅使用Node.js运行整个网站,例如使用以下模块。我假设你知道npm。如果不知道,我真的建议你去谷歌了解一下。要搜索npm,可以使用http://search.npmjs.org

Web框架:

  1. 面向Node.js的高性能、高级Web开发
    https://github.com/visionmedia/express

  2. Socket.IO旨在使实时应用程序在每个浏览器和移动设备上都成为可能,消除了不同传输机制之间的差异。 https://github.com/learnboost/socket.io-node

我相信使用这两个Web框架,你可以创建许多网站。例如,Express是一个非常强大的Web框架,支持许多很酷的功能,如:

  • 支持session
  • 许多强大的template engines。我喜欢Jade。你也可以轻松地在客户端和服务器之间共享这些。
  • 出色的routing

仅列举一些。

数据库:

  1. Redis是一个开源的高级键值存储器。它通常被称为数据结构服务器,因为键可以包含字符串、哈希、列表、集合和排序集。
    https://github.com/mranney/node_redis

  2. MongoDB(来自“humongous”)是一个可扩展的、高性能的、开源的、面向文档的数据库。 Mongoose是一个MongoDB对象建模工具,旨在在异步环境中工作。
    https://github.com/learnboost/mongoose/

使用这两个数据库,您应该能够完成大部分任务。好处是Redis非常快/简单的高级KV存储(在内存中存储数据集/也支持VM),并支持复制,而Mongodb更完整(比Redis慢)并支持分片。

身份验证:

  1. 您的node.js Connect和Express应用程序的身份验证和授权(密码、Facebook等)。
    https://github.com/bnoguchi/everyauth

就像我之前说过的,只使用这些模块就可以做很多事情。


如果你在使用Mongo,我会推荐https://github.com/christkv/node-mongodb-native。它有很多开发人员在维护,而且易于使用。 - RobKohr
@RobKohr,Mongoose(如上所述)在底层使用node-mongodb-native,但在此基础上有一些非常好的抽象。请参见此链接以获取更多信息:http://blog.mongodb.org/post/812003773/node-js-and-mongodb :) - Alfred

15

Express.js 更像是 Sinatra。相比 Rails,它们是更简单的框架。

Express 的网站列表相对较小,请参考 http://expressjs.com/applications.html

因此,我认为查看 Sinatra 的列表也很有意义,可以访问此链接:http://www.sinatrarb.com/wild.html

回答你的问题,从反方向来说,它确实缺乏 Rails 的所有功能。但是有很多网站是完全使用 Express 写成的。如果你的网站需要更好的性能,完全使用 Node.js 可能是正确的决定,这取决于你会错过哪些功能和你所需的性能。


8
我不确定,但我认为这是完全可能的。多年来,我一直使用普通的服务器端JavaScript构建完整的站点而没有问题。 Node.js的优点似乎在于其事件驱动模型和像socket.io这样的东西。我刚开始尝试它,可能会尝试将现有网站移植到Node.js上。
这里可以找到许多使用Node.js构建的网站列表。
最后,您可能需要阅读:在Node.js中构建真实网站的感受是什么

还要记住,Node.js是构建在V8 JS引擎上的,这是Chrome浏览器使用的相同引擎,因此非常快。 - hellatan

2
是的,目前node.js缺乏rails提供的许多(至少几个)功能。最终,可用的node.js模块集将为RoR提供全面的良好替代方案。或者至少提供不同的(通常更现代的)方法来解决相同的根本问题。目前node.js生态系统中仍然缺少一些重要的东西,包括postgresql的良好ORM(rails具有很棒的ActiveRecord)和良好的DB模式管理子系统。这两个在此刻的node.js生态系统中都不存在,但它们肯定会在适当的时间出现。Rails目前已经掌握了这些技能。
node.js有一些RoR没有的技巧。在node.js中调试比RoR更无缝,而express.js则更加灵活。Express是库方法(您告诉它该怎么做),而rails是框架方法(您填写它为您创建的样板文件)。还有一些奇妙的东西,如stylus和jade,在rails中也有对应物,但是当您使用一种语言(javascript或我喜欢的CoffeeScript)编写完整的应用程序,并且所有内容都以现代的node.js / TJ Holowaychuck风格呈现时,您将获得一种非常好的内聚性。
另一件事要记住的是,虽然可用的node.js模块列表非常令人印象深刻,但其中许多模块并不像它们的rails / django类比品那样成熟和经过测试。这是一种命中或者错过的情况,所以请注意。

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