收集了NodeJS开发中经常使用的一些模块。
MVC框架 - Express
Express 是轻量灵活的Nodejs Web应用框架。它能够高速地搭建站点。
Express框架建立在Nodejs内置的Http模块上,并对Http模块再包装。从而实际Web请求处理的功能。它支持多种前端模板,如Jade, EJS等。它是T.J大神的作品,只是已经交由其他团队维护了。
Koa是T.J大神的另外一个作品,号称下一代NodeJS web框架。使用 koa 编写 web 应用。通过组合不同的 generator,能够免除反复繁琐的回调函数嵌套。并极大地提升经常使用错误处理效率。
Koa 不在内核方法中绑定不论什么中间件。它只提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。须要注意的是:koa 依赖支持 generator 的 Node
环境,准确来说,是 node >= 0.11.9 的环境。
安装完毕后,应确保使用 $ node app.js --harmony 或(--harmony-generators) 即,harmony 模式执行程序。个人认为假设是正式产品中还是用Express比較靠谱。
Rest开发 - Restify
restify 是一个基于Nodejs的REST应用框架。支持server端和client。restify比起express更专注于REST服务,去掉了express中的template, render等功能,同一时候强化了REST协议使用,版本号化支持,HTTP的异常处理。
hapi是一个用来构建基于 Node.js 的应用和服务的富框架。使得开发人员把重点放在便携可重用的应用逻辑而不是构建架构。内建输入验证、缓存、认证和其它 Web 应用开发经常使用的功能,用来开发rest代码也是一个不错的选择。
前端模板 - EJS
EJS是一个功能强大又比較easy使用的前端模板,Express对EJS支持比較好。它的语法比較接近前端开发者的使用方式。另外名气比較大的前端模板是Jade,它和Express是同一个作者开发的,Express默认用的就是Jade模板,可是它的语法更接近后端语言的语法,前端开发者非常多时候难以适应,可是它的功能确实非常强大。
数据库驱动 - Mongoose
MongoDB和NodeJS应该是最佳搭档了,而Mongoose是MongoDB的对象模型工具。通过Mongoose框架,能够进行很方便的訪问MongoDB的操作。当然假设你对性能要求很高的话。也能够考虑使用mongodb,它功能相对较少,比較底层一些,事实上Mongoose就是基于它构建的。
Web Socket - Socket.IO
NodeJS的一个主要长处是高并发,因此NodeJS是Web Socketserver的理想选择,而Socket.IO则Socket模块的不二选择,能够用于构建聊天室、客服系统等。
Socket.IO不仅提供了server端代码,还提供了前端JS代码。能够很方便的进行Web Socket开发,同一时候它兼容那些不支持Web Socket的浏览器。
日志管理 - Log4js
类似于JAVA中的log4j,具有coloured console logging、能够设置输出等级等功能。简单易用。假设没有复杂需求足够使用了。
winston是一个功能更强大也更复杂的日志模块,人气比較高,对功能有追求的能够看看这个模块。
HTTP调用 Request
能够理解为一个简化的CURL模块,建立各种HTTP请求,支持授权验证。事实上功能还是许多的,基本满足绝大部分需求。眼下在NPM模块排行前几名。
异步流程控制 - Async
NodeJS中大量的异步callback嵌套预计让许多人头疼,尤其是多个异步函数要求一定的调用顺序时更是让代码失控,Async能够很好的解决这些问题,它能够使异步流程同步化。Q是第二种很不错的选择,它是实现了promises接口。
部署 - forever
forever可以看做是一个nodejs的守护进程。可以启动。停止。重新启动我们的app应用,执行稳定。支持高并发。启动/停止命令简单,支持热部署。宕机重新启动,监控界面和日志。集群环境。
pm2是一个带有负载均衡功能的Node应用的进程管理器。当你要把你的独立代码利用所有的server上的所有CPU,并保证进程永远都活着。0秒的重载。
假设你想要从操作系统的层次来解决NodeJSserver管理问题。能够參考:Linux系统服务upstart
当然开发时可以使用supervisor启动服务。它可以监控文件。当有文件更新时自己主动重新启动服务。事实上Forever也有这个功能。
项目管理
grunt是一个自己主动化的构建工具。对于须要重复重复的任务。比如压缩(minification)、编译、单元測试、linting等,自己主动化工具能够减轻你的劳动。简化你的工作。
当你正确配置好了任务。任务执行器就会自己主动帮你或你的小组完毕大部分无聊的工作。而且它有大量的插件能够使用。
我主要用它作前端的自己主动化处理工作。
bower是twitter的又一个开源项目。使用nodejs开发,用于web包管理。作为一个js依赖管理的工具,提供一种理想包管理方式,借助了npm的一些思想,为我们提供一个舒服的开发环境。
yeoman是Google的团队和外部贡献者团队合作开发的,他的目标是通过Grunt(一个用于开发任务自己主动化的命令行工具)和Bower(一个HTML、CSS、Javascript和图片等前端资源的包管理器)的包装为开发人员创建一个易用的工作流。Yeoman的目的不仅是要为新项目建立工作流,同一时候还是为了解决前端开发所面临的诸多严重问题,比如零散的依赖关系。
定时任务 - Cron
cron是一个小巧的定时任务管理模块,能够满足我们绝大部分需求。它支持标准的cron patterns,熟悉linux cron tab的语法就能够非常easy上手。
另外一个名气比較大且功能比較强大的定时模块是Later,对于功能要求比較高的可用用它,later的缺点是有点复杂。不像cron仅仅要拿来就会用了。
工具包
underscore是一个JS工具库,主要提供了对数组。对象,函数等一些基础工具函数,能够同一时候在浏览器和NodeJS环境中执行。
建议在每一个项目中使用。
moment是一个日期工具库,主要提供了对日期的解析,验证。操作和格式化等。假设须要对日期作较多的操作或比較复杂的操作,则它是一个不错的选择。毕竟JS自带的Date功能太弱了。
Connect是一系列的中间件的集合,包含日志,session, cookie, body parser等。它做了大量HTTP相关的基础性的工作,Express框架就依赖它进行工作的。