我已经阅读了很多有关Nodejs及其框架的文章,最近完成了我的第一个完整的javascript前端(使用Angularjs)。
我已经决定,我的下一个宠物项目将是使用以下两个框架之一进行的Nodejs冒险:
我已经阅读了两者,但是仍然不能完全理解它们之间的差异,以及为什么我应该选择在另一种之上使用。因此,请戴上您最好的推销员帽子,挑选一个框架,然后卖给我。
我的宠物项目需要具备以下功能:
- 现场比分
- 类似于Reddit的线程,实时
- 类似于Wikipedia的网页版
- 用户/角色
Answers:
我不能代表Meteor,但是我可以帮助我提供有关Sails的一些背景知识,因为我创建了它。
tldr; Sails并不是解决所有Web问题的灵丹妙药,但我相信Node.js确实是。Sails的目标是提供一个实用的框架,以开发基于node.js的完整,可伸缩,启动和企业友好型应用程序。我从Balderdash开始时提出了一个问题:“我们可以对所有内容使用Node.js吗?”。帆是答案。
从我们的新文档:
Sails当然是一个Web框架。但是退后一步。那是什么意思?有时,当我们提到“网络”时,我们指的是“前端网络”。我们想到的概念包括Web标准,HTML 5或CSS 3。以及Backbone,Angular或jQuery之类的框架。Sails不是Web框架的“那种”。Sails与Angular和Backbone配合使用非常好,但是您永远不会使用Sails代替这些库。
另一方面,有时当我们谈论“ Web框架”时,我们指的是“后端Web”。这引起了诸如REST,HTTP或WebSockets等概念。并以Java,Ruby,Node.js等技术为基础。“后端Web”框架可帮助您执行诸如构建API,与数据库交互,提供HTML文件以及处理成千上万同时用户的任务。Sails是“那种” Web框架。
几年前,我承诺将Node.js用于所有内容-一见钟情。我在Express和Socket.io的基础上构建了Sails,因为它们是(并且仍然是)各自使用案例中最完善的Node模块。Sails中的请求处理代码与Express兼容,并具有隐式支持Socket.io的其他优点。
Sails旨在与您在Angular,Backbone,iOS / ObjC,Android / Java中构建前端的任何策略兼容,甚至仅提供供其他Web服务或您的原始API使用的策略。开发者社区。如果您最终改变了方法(例如,从骨干切换到Angular)或完全构建了一个新的前端(例如,构建Windows Phone本机应用程序),那么Sails应用程序仍然可以使用。您可能已经知道,有人将这种方法称为面向服务的体系结构或SOA(Joe McCann对此主题有很好的介绍。)
同样,Sails维护着其他熟悉的用于构建Web服务器的约定-标准的MVC结构,创建干净的API的能力以及开放,可配置,可扩展甚至可交换的核心模块。这意味着Sails可以根据需要进行定制,以适应其用户的需求。
2013年,该框架的受欢迎程度有了巨大的增长,而我们的咨询业务也在增长。我和其余的核心维护人员都将精力集中在使后端开发尽可能快速和直接上。去年,由于我们的核心团队和整个(不断扩展的)Sails社区的共同努力,钩子(插件),测试和文档等Sails的相关方面都取得了很大进展。我们仍在研究许多路线图项目,但我相信Sails是当今在Node上进行稳定,可维护的MVC开发的最佳选择。我和团队的其他成员都致力于其持续的维护和功能开发,并且由于我们将其用于所有客户项目,因此它无处不在。
我坚决致力于使Sails成为目前最好的Web框架,但绝不以牺牲Node.js为代价。我和核心团队始终致力于增强Node生态系统,这意味着拥抱NPM,利用现有的Node技术和最佳实践等。这不仅是因为这样做更有意义,而且因为我们是Node.js开发人员。我们所有努力的动机是使Node更易于访问,而不是取代它。因此,如果在某个奇怪的并行世界中,我被选为浮士德式的选择,是将Sails转换为其他语言,还是完全放弃Sails但仍然能够使用Node,那么我会选择后者。
其他资源:
我已经与Meteor建立了几个项目,但尚未与Sails合作。因此,我的意见肯定会有所偏颇,希望无论如何会有所帮助。
建立前端
流星提供了自己的称为Blaze的前端框架,该框架将包含在即将发布的0.8版本中。Meteor负责将集合中的数据绑定到视图。因此,您不必担心告诉视图更新,他们只需这样做。
另一方面,Sails仅提供一个后端框架,您将必须带上自己的前端框架。
与大多数Node.js框架不同,流星是同步的
Meteor循环运行,如果您想使用Node.js程序包,则必须做一些额外的工作以确保它们在Meteor中正常运行。
Sails似乎是一个简单的MVC Node.js框架,因此当您研究它时,应该没有什么令人惊讶的地方。
您应该将MongoDB与Meteor一起使用
是的,您可以将其他数据库与Meteor一起使用,但它们所提供的支持与MongoDB差不多。而对于Sails,看起来他们有几个数据库的ORM。
性能
对于大规模应用,Meteor的性能可能不佳。解决此问题的工作很多,到2014年底,我们可以预期会有流星的扩展解决方案。
稳定性
流星仍然非常新鲜,尚未达到1.0。您应该期望在接下来的几个版本中进行一些更改,这些更改将破坏向后兼容性。如果您尽快开始使用它,则可能要考虑使用0.8-rc0分支。话虽这么说,管道中的某些功能确实很棒,并且将使1.0版本非常诱人。
最后的想法?
我喜欢Meteor,因为它的特质。您将必须学习流星的做事方式,但是一旦开始做这件事,您会觉得自己已经喝醉了。由于数据绑定到视图的方式,服务器和客户端之间的线路并不遥远。流星代表了应用程序体系结构的范式转变,如果您还没有尝试过,我会推荐它。
PS Checkout路线图,以了解即将发生的事情。
npm
与流星一起使用软件包,这可能是最好的参考:meteorhacks.com/complete-npm-integration-for-meteor.html
我只能对帆发表意见。我是一位经验丰富的Javascript开发人员,自90年代以来一直在构建基于Javascript的嵌入式机顶盒应用程序。
效果非常好 -入门非常好,发布的材料给了我很大的支持-学习曲线很短,帆后面有一个健康的社区-初步学习后,很快就很容易发挥创造力
有待改进的地方 -复杂的数据结构难以实现-Passport.js的集成非常痛苦,因为没有干净的参考资料
建议 -Ponzi编码器有一个很好的教程,它确实帮助了我https://www.youtube.com/user/ponzicoder- 了解更多有关Express和Waterline的知识,将在您尝试更复杂的数据挑战时有所帮助
总的来说,我会推荐帆。
passport.use('local-login', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not) },
我目前使用Meteor,但尚未使用Sails.js。
Meteor的使用非常愉快,我认为它将是实时Web应用程序的绝佳选择。关于用户/角色,您可以签出集成的Accounts程序包,也可以在Atmosphere中搜索社区贡献的角色/权限程序包。
最终,我建议您尝试使用这两种技术的小型项目,然后看看您更喜欢哪个。