当前位置: 首页 > 科技观察

全JavascriptWeb开发架构:MEAN

时间:2023-03-16 22:22:36 科技观察

介绍最近,全Javascript开发架构MEAN突然在Angular社区的原型开发者中流行起来。首字母代表:(M)ongoDB——NoSQL文档数据库,采用JSON风格存储数据,甚至使用JS进行sql查询;(E)xpress——基于节点的Web开发框架;(A))agular——JS前端开发框架,提供声明式双向数据绑定;(N)ode——基于V8的运行环境(JS语言开发),可以构建快速响应和可扩展的网络应用。MEAN架构示意图MEAN的支持者声称,如果整个开发栈都能使用JS,势必会大大提高效率,这无疑是一大卖点。这样,开发者(无论是前端还是后端)不仅可以使用一致的数据模型,而且在其他方??面也可以获得一致的编程体验。比如以Mongo为例,可以使用类JSON的格式(BSON,binaryJSON)来存储数据,然后在Express/Node中调用JSON查询语句,再将结果传递给前端Angular中显示JSON格式。这样一来,也自然让调试变得容易了很多。注意:其实在MEAN架构中,前端Angular并不是必须的,可以用其他前端框架代替,比如Backbone、Ember或者Polymer。为什么选择MongoDB?如上所述,这种架构最重要的优点是可以使用单一语言,这是选择Mongo的首要原因。noSQL的是非这里就不讨论了。一些人对MEAN架构的批评是,MongoDB可以很好地适用于中小型应用程序,但对于大型应用程序(***用户)可能会捉襟见肘。我想说的是,这完全取决于您如何使用它。SQL数据库本身是强类型的,所以在很大程度上可以保证一定程度的一致性,从而保证很多类型的脏数据无法在第一时间进入数据库。另一方面,NoSQL是弱类型数据库,无法进行数据校验,只能由开发者实现。基于这样的特点,它特别适合存储那些不规则的数据,尤其是在原型开发阶段。此时数据模型正在发生快速变化。SQL和noSQL之间的技术差异归结为性能和稳定性之间的平衡。在某些情况下,数据事务处理一旦设定,就不会轻易改变,此时使用Mongo是非常合适的;但是,有时候会涉及到更复杂的事务处理,涉及到很多独立的业务逻辑,由于Mongo没有提供简单的数据模型来支持一定程度的原子操作,这时候SQL就可以派上用场了。但无论如何,无论你是否选择MEAN中的M,最终还是需要根据自己的需求选择合适的工具来做合适的事情。为什么是快递?您可以简单地将Express视为构建在Node平台上的工具。Web应用程序的工具集。在Node的基础上,它提供了很多简单的接口来创建请求节点、处理cookies等,同时也提供了很多功能来帮助你搭建自己的服务器。总的来说,Express有以下几个方面的优势:设置REST路由简单***:app.get(/account/:id,function(req,res){/*req.params('id')可用*/});支持Jade或Mustache等模板引擎自动处理HTTP标头:app.get('/',function(req,res){res.json({object:'foo'});});支持Connect中间件,可以插入额外的请求或响应处理,比如用户认证提供辅助功能解析POST请求防止XSS优雅的错误处理如何快速上手MEAN如果你想快速上手MEAN,那就mean.io是一个很好的选择。该项目旨在解决MEAN架构中的一些常见集成问题。目前维护的很好,文档也很清楚。自己添加第三方库也很方便,也可以和Yeoman结合使用(viagenerator-meanbyJamesCryer)。在进一步阅读之前,假设我们同意以下几点:(a)Mongo至少非常适合制作完整的Javascript堆栈的原型;(b)承认即使Angular像现在这样流行,总有一天它会被其他一些JS框架取代,只要它们能够帮助我们快速轻松地构建这个架构。接下来是Yeoman,它由3个熟悉的工具组成:Grunt:用于生成、预览和自动测试您的项目,特别感谢Yeoman和grint-contrib团队创建的许多grunt任务。Bower:一款前端依赖管理工具,有了它你不再需要手动下载和管理第三方JS库。YO:快速生成一个新的应用程序,包括配置您的Grunt任务和您最有可能使用的Bower依赖项。一年前,作者和其他一些人创建了一个名为ExpressStack的项目。想法很简单,就是提供一些工具,可以快速生成构建全JSweb应用所需的一切。然而,这个项目死了,尽管如此,许多类似的项目如雨后春笋般涌现。以下是这些项目的一些介绍:注意:您可能需要安装Yeom(npminstall-gyo)和以下生成器(npminstall-g)。1.generator-angular-fullstack这是一个AngularJS生成器,集成了Express和可选的MongoDB。主要功能如下:支持客户端和服务端Livereload。Express服务器集成了grunt任务。内置便捷的部署流程。支持玉。参考:http://tylerhenkel.com/creating-apps-with-angular-and-node-using-yeoman/2.generator-meanstack另一种MEAN架构的生成器,集成了grunt-express,有如下功能:在generator-angular的基础上,用express替换Connect。支持客户端和服务器的Livereload。使用app_grunt.js文件启动应用程序,并在app.js中定义路由。目录结构基本沿用了generator-angular风格,只有少量改动。参考:https://github.com/Grievoushead/generator-express-angular3.generator-mean-seed集成了Mongo、Express、Angular、Yeoman、Karma和Protractor(用于自动测试)。4.Generator-klei和其他类似,但它使用了Mongoose和Stylus。其他一些特性包括:它的目录结构非常容易扩展(包括一个TODOList应用示例)一个完全配置的Gruntfile,集成了livereload、linting、concatenation、minification等。使用exctrl自动挂载API。使用grunt-injector,可以自动加载新添加的js和css,无需手动修改Html的布局文件。使用Karma、Mocha和Chai进行前端单元测试。5.ultimate-seed-generator这个生成器非常全面,加入了很多第三方库,包括用户登录的Passport和加载js的Browserify。集成AngularUI、Barbeque(用于任务队列管理)和BootStrap集成Bower、Browserify、Express和FontAwesome集成Grunt、Handlebars、jQuery、JSHint和Karma/Mocha支持LESS/LESSHat、Livereload和Lodash/Underscore集成Modernizr,如何选择MongoDB/猫鼬和护照?看了这么多发电机,自然要问,到底该选哪一个呢?事实上,根据其与最新版本Yeoman的兼容性和维护活动,上面的列表是有序的。全Javascript架构适合生产级应用吗?我不得不承认,如果JavaScript可以用于开发堆栈的每一层(至少用于原型设计),那就太好了,但要注意不要用JavaScript来追求这个目标。被自己束缚。虽然确实越来越多的大型应用正在采用类似的架构,比如沃尔玛、LinkedIn,但这并不意味着模仿就一定能成功。另一个需要注意的是,在Node上构建后端比其他语言(如Ruby、Python或Java)要困难得多。您可能必须自己处理内存泄漏,避免在事件循环中进行耗时的计算,并且非常小心异常处理。如果这些处理不当,极有可能导致整个应用服务器崩溃,但是这些问题在其他平台上已经处理好了。非常好。不过,这并不是说Node不能用于生产环境,当然可以,但要格外小心。老实说,以“一揽子”的方式为Web应用提供一个全面的解决方案是非常困难的,MEAN架构当然也有其局限性。前端和后端设计模式、原则和风格已经发生了很多变化。如果您认为PHP或Rails是更明智的选择,请继续使用它。否则,尝试一下MEAN,至少现在是这样。//译文原发于@罗华明的个人博客(原文翻译)。