来自我们的新文档:
Sails当然是一个Web框架。但是让我们退一步,这意味着什么?有时候,当我们提到“Web”时,我们指的是“前端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甚至只是提供原始API供其他Web服务或您的开发社区使用的任何构建前端的策略兼容。如果您最终改变了方法(例如,从Backbone切换到Angular)或完全构建了新的前端(例如,构建Windows Phone本机应用程序),您的Sails应用程序仍将正常工作。如您所知,有些人称此方法为面向服务的架构或SOA(Joe McCann对此有一个很棒的演示文稿)。额外资源:
常见问题解答 | Sails 101 | 原始视频教程 | 贡献指南 | Stackoverflow
我已经使用Meteor构建了几个项目,但还没有使用Sails。因此,我的观点肯定会有偏见,但希望对您有所帮助。
构建前端
Meteor提供了自己的前端框架Blaze-包含在即将发布的0.8版本中。Meteor负责将集合中的数据绑定到视图上。由于这一点,您不必担心告诉您的视图更新,它们只是这样做。
另一方面,Sails仅提供后端框架,您需要自己带上前端框架。
与大多数Node.js框架不同,Meteor是同步的
Meteor在循环中运行,如果您想使用Node.js包,您需要做一些额外的工作,以确保它们在Meteor中正常运行。
Sails似乎是一个简单的MVC Node.js框架,因此当您研究它时不应该有太多令人惊讶的事情。
您应该在Meteor中使用MongoDB
是的,你可以在Meteor中使用其他数据库,但它们的支持远不如MongoDB。而在Sails中,看起来他们有针对一些数据库的ORM。
性能
对于大型应用程序,Meteor 可能表现不佳。目前正在进行大量工作来解决此问题,到2014年底,我们可以期望有针对Meteor的扩展解决方案。
稳定性
Meteor仍然非常新,并且尚未达到1.0版本。您应该期望在接下来的几个版本中进行一些更改,这些更改会破坏向后兼容性。如果您希望尽快开始使用它,则可能希望考虑使用0.8-rc0分支。话虽如此,管道中的一些功能确实非常棒,将使1.0版本非常诱人。
最后的想法?
我喜欢 Meteor,因为它有其独特之处。你需要学习 Meteor 的做法,但一旦开始使用,你会感觉自己已经入门了。由于数据绑定到视图的方式,服务器和客户端之间的界限不是很明显。Meteor 代表了应用程序架构的范式转变,如果你还没有尝试过,我建议你试试。我只能就sails发表意见。我是一名经验非常丰富的Javascript开发者,自上世纪90年代以来一直在使用基于Javascript构建的嵌入式机顶盒应用程序。
优点: - 很容易上手,发布的材料支持很好。 - 学习曲线很短,后面有一个蓬勃发展的社区。 - 初步学习之后,可以很快做出创意。
需要改进的地方: - 复杂数据结构的实现比较棘手。 - Passport.js的集成很痛苦,因为没有干净的参考材料。
推荐: - Ponzi Coder有一个很棒的教程,帮助我快速上手 https://www.youtube.com/user/ponzicoder - 当你尝试更复杂的数据挑战时,了解Express和Waterline会更有帮助。
总的来说,我会推荐sails。
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) },
- simondelliott