node.js上除了Express还有哪些好用的web开发框架?
一、node.js上除了Express还有哪些好用的web开发框架
这个就无需再介绍了吧, 几乎已经成为闭眼推荐的首位, 有点在于简单灵活, 缺陷也在于过于简单, 相当于每个功能都需要自己选择不同组件搭建, 虽然有各自脚手架帮助, 但对于开发大一点的系统还是缺乏必要的代码框架, 光搭建整合基础框架就会花不少时间, 对于新上手node.js不久的笔者而言,自由灵活也意味着容易犯错, 较好有类似Djongo/ThinkPHP那样out-of-box即开即用的开发框架快速上手而不是坐而论道.
优点: 插件众多, 简单, 自由, 丰俭由人, 适合于简单业务逻辑模型
缺点: 缺少规范性, 需要自己选择搭配的组件太多, 不太适合应用复杂的业务.
KoaExpress基于ES6的升级版, async/await解决ES5 callback hell的痼疾, 但是选择框架不仅仅是框架本身, 同时还要看插件扩展的丰富和成熟度, 因为没有用过担心后面遇坑填不平而放弃, 做研究可以大胆, 做产品必须谨慎.
优点: ES6语法, 逻辑易懂
缺点: 刚开始应用不久, 担心有扩展不足和不兼容问题
Meteor一个完全统一前后台开发的一站式框架, 从后台数据库到前端view全部包含在内, 特别适合于重度依赖websocket的SPA(单页面应用)开发, 国外流行的Asana就是完全采用Meteor框架开发.
优点:一站式解决方案, 前后台一体开发, 强大的websocket + mongoDB支持
缺点:自由度不够, 和传统的Web框架概念差异较大.
socketstream如果说RESTful是Ajax的概念基础, socketstream实际上更接近于早期RPC的思路, 将函数调用(function name + parameters)建构在websocket协议层之上, 例如下面这段代码其实就是调用远程函数计算.
//– server side in /server/rpc/app.js
exports.actions = function(req, res, ss){
// return list of actions which can be called publicly
return {
square: function(number){
res(number * number);
}
}
}
//– client request
ss.rpc(‘app.square’, 25)
优点: 完全web socket, 函数+参数==>返回值概念简单
缺点:和主流的RESTful概念偏离较大, 很少看到实际应用案例
Sails.js这是本文的主角, 相当于针对典型应用框架所需组件在Express基础上的集成封装, 把日常开发常用的功能都给你集成好了, 开箱即用, 完全兼容Express的middleware, 如果了解ThinkPHP就更容易上手了, RoR / Convention over Configuration的概念可以立即进入实际业务开发, 反正做什么事情应该怎么做人家都给你规定好了, 可以从实验代码逐步迭代到中大项目的生产代码.
除了传统的HTTP RESTful外还同时支持websocket – 同一个请求协议既可以通过Ajax发送, 也可以通过websocket发送, 这一点让人赞赏.
优点: 开箱即用的全功能Express增强框架, 内置支持websocket
缺点:(据说)ORM性能不好
延伸阅读:
二、HTML是什么
HTML(Hyper Text Mark-up Language )即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出。设计 HTML 语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。这样,你只要使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。 HTML文本是由 HTML命令组成的描述性文本,HTML 命令可以说明文字、 图形、动画、声音、表格、链接等。 HTML的结构包括头部 (Head)、主体 (Body) 两大部分。头部描述浏览器所需的信息,主体包含所要说明的具体内容。

猜你喜欢LIKE
相关推荐HOT
更多>>
vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访...详情>>
2023-10-14 14:59:11
分库分表的数据库和分布式数据库有什么区别?
一、分库分表的数据库和分布式数据库有什么区别分库分表的数据库:没有这种数据库,所谓分库分表,这是开发应用的程序员通过自己的代码、或者底...详情>>
2023-10-14 13:59:18
APP定制开发的难点有哪些?
一、APP定制开发的难点1、多平台适配不同的移动平台(如iOS和Android)具有不同的操作系统、开发语言和开发工具。在进行APP定制开发时,需要适...详情>>
2023-10-14 12:57:35
Python特点及应用?
一、Python的特点Python是一种高级编程语言,由Guido van Rossum于上世纪90年代初开发,它具有以下特点:1、语法简洁易读Python使用缩进来表示...详情>>
2023-10-14 11:57:43热门推荐
Python代码中的yield到底是什么?
沸wait()、sleep()、join()和yield()区别是什么?
热手机app开发需要哪些技术?
热一个事务提交时,redo log和undo log以及bin log的生成流程是怎么样的?
新Go语言new和make的使用区别和优异实践?
软件开发需要注意哪些问题?
为什么要读JVM规范?
一次简单的redis网络请求会有哪些CPU开销?
WHERE中有很多IN判断怎么提速?
怎么将查询到的网站后台数据用最方便的方式导出?
为什么说HADOOP扩展性优于MPP架构的关系型数据库?
vector, list, map等容器使用场合是什么?
哈希表、字典、二维数组的区别是什么?
数据库的事务隔离与锁机制有什么差别和联系?
技术干货






