收集了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就是基于它构建的。

其他:redismysql

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框架就依赖它进行工作的。

单元測试

Mocha,Karma,Jasmine

參考文献

NodeJS经常使用模块收集的更多相关文章

  1. 关于Nodejs的多进程模块Cluster

    关于Nodejs的多进程模块Cluster   前述 我们都知道nodejs最大的特点就是单进程.无阻塞运行,并且是异步事件驱动的.Nodejs的这些特性能够很好的解决一些问题,例如在服务器开发中,并 ...

  2. Nodejs中cluster模块的多进程共享数据问题

    Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...

  3. nodejs的require模块及路径

    在nodejs中,模块大概可以分为核心模块和文件模块. 核心模块是被编译成二进制代码,引用的时候只需require表示符即可,如(require('net')). 文件模块,则是指js文件.json文 ...

  4. 使用nodejs的net模块创建TCP服务器

    使用nodejs的net模块创建TCP服务器 laiqun@msn.cn Contents 1. 代码实现 2. 使用telnet连接服务器测试 3. 创建一个TCP的client 1. 代码实现 ; ...

  5. 使用nodejs的http模块创建web服务器

    使用nodejs的http模块创建web服务器 laiqun@msn.cn Contents 1. web服务器基础知识 2. Node.js的Web 服务器 3. 代码实现 1. web服务器基础知 ...

  6. Nodejs的http模块

    一.http服务器    我们知道传统的HTTP服务器是由Aphche.Nginx.IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如: ...

  7. node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)

    第七章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  8. nodeJS里面的模块

    this 打开cmd,执行如下命令 nodeconsole.log(this); 输出如上信息,表示this是global,每个电脑的配置信息不一样的话,可能会有所差别的. 然后新建一个文件,写下如下 ...

  9. nodejs 使用 js 模块

    nodejs 使用 js 模块 Intro 最近需要用 nodejs 做一个爬虫,Google 有一个 Puppeteer 的项目,可以用它来做爬虫,有关 Puppeteer 的介绍网上也有很多,在这 ...

随机推荐

  1. Python学习日记之字典深复制与浅复制

    Python中通过copy模块有两种复制(深复制与浅复制) copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象. deepcopy 深复制 复制对象及其子对象 因此,复制后对原dic ...

  2. strong,weak, retain, assign的区别@property的参数

    strong,weak, retain, assign的区别@property的参数 先说经验 使用场合 copy:NSString,block, weak:UI控件,代理 strong:一般对象.自 ...

  3. 外观模式(Facade)-子系统的协作与整合-接口模式

    对子系统进行整合,对外提供更强大或更便捷的接口. 在一个模块和几个子系统进行通信时考虑. 什么是外观模式? 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口 ...

  4. Change the color of a link in an NSMutableAttributedString

    Swift Updated for Swift 3 Use with a textView.linkTextAttributes = [NSForegroundColorAttributeName: ...

  5. 前端axios发送的数据后端接收不到(没有自动依赖注入)可能的原因

    前端请求头content-type没有进行正确设置,后端无法解析该类型数据,比如说: 后端若想接收json类型的数据,则需要配置相应的转换器,(spring中可使用@RequestBody注解),若没 ...

  6. Java基础(十)--static关键字

    static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存 ...

  7. tp系统常量

    ThinkPHP的公共入口文件里定义了系统常量 RUNTIME_PATH----系统运行时目录 LIB_PATH-----------系统核心类库目录 CORE_PATH--------Think类库 ...

  8. 07Microsoft SQL Server View

    Microsoft SQL Server View 1.视图 视图是一个虚拟的表,是表中的数据经过某种筛选后的显示方式,视图由预定义的查询select语句组成. 2.查看视图信息 --查询系统所有视图 ...

  9. Python之TCP编程

    参考原文 廖雪峰Python教程 客户端 我们知道每一条TCP的连接有2个端点,这两个端点叫做套接字socket.如果我们要进行基于TCP的通信必须先创建套接字.在Python中可以这样创建套接字so ...

  10. 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法

    这个错误是和调用相机摄像头相关的. 产生这个错误的原因主要在于代码控制分辨率的显示和真机测试分辨率不一样. 一:解决办法 WindowManager wm = (WindowManager) getS ...