My Toolkit of Node.js

前言

倘若从去年7月份算起,我入门Nodejs也有半年有余了。这半年,从自学入门Nodejs到后来以前端实习生的身份入职魅族,再到后来转型Nodejs开发者,这期间多得有一位严格的「老师」,使得我前进的步伐非以往的速度能比拟。在学习,工作的时候,我也接触了很多优秀的、实实在在能解决日常开发问题、提高效率的Nodejs模块,故而罗列出来,分享之。

Cheerio

Fast, flexible, and lean implementation of core jQuery designed specifically for the server.

Cheerio,说它是服务器端的jQuery一点也不为过,在github上也是大受欢迎,star数达4500有余,至目前为止,已经有923次commit。它兼容jQuery绝大部分的库,以至于你只需要一句$ = require('cheerio').load(YOUR_HTML_CONTENT);,便可以像在前端用jQuery一样的舒畅,愉快。
By the way,和Cheerio类似的框架还有:jsdom,一个受欢迎程度略低于Cheerio,但是它有2,147多的commit,可见维护者之诚意。

Waterline

An adapter-based ORM for Node.js with support for mysql, mongo, postgres, redis, and more

Waterline是从Sails框架衍生出来的Nodejs平台下的ORM,除了支持常见的mysql、mongodb,还支持PostgreSQL、Redis、Memory、Disk等等

Bookshelf

A Node.js ORM for PostgreSQL, MySQL and SQLite3 in the style of Backbone.js

与Waterline类似,但作为同类产品且被Ghost选择标配之一的Bookshelf必然有它的特别之处,仍待君细细品来。

Node-Soap

A SOAP client and server for node.js.

对于REST,大家必然熟悉,就算不熟悉,也是久仰其大名,或者是略有耳闻。REST简单而直观,把HTTP协议利用到了极限,在这种思想指导下,它甚至用HTTP请求的头信息来指明资源的表示形式,用HTTP的错误机制来返回访问资源的错误。但在R.T. Fielding博士在他的论文里提出REST之前,又是谁来承担Web Service这份差使呢?
SOAP (Simple Object Access Protocol) 顾名思义,是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据。它基于 XML 格式,在绝大多数情况下,使用HTTP协议传输WSDL请求。
而node-soap模块,则允许在node环境中,接入其他程序语言 (诸如 ASP.net、Java 等) 开发的WebService。也能够在node中开发基于SOAP的WebService供其他程序调用。
当然,在大多数情况下,过去SOAP能做的事,REST也是能做到的,且REST更加优雅,简单。以我的水平,我也是想不清楚SOAP依然存在的必然性,但是有那么一句话:「存在,就是合理的」。既然,它存在,也有人用到,那么在合作开发中和SOAP相遇也是有可能性的,相信那是我们的缘分。
如果你有兴趣,听一下我和SOAP邂逅的故事:SOAP,Web service的枢纽

Passport

Simple, unobtrusive authentication for Node.js.

如果你的站点想快速建立passport-user结构的用户系统,且能够简单的接入流行的第三方登录,用passport就没错了。它不但提供了本站登录的解决方案,还有一大堆第三方登录的策略,见:Strategies
如果你用Sails的话,这里还有一个承接Sails和passport的模块:sails-generate-auth

Bluebird

Bluebird is a full featured promise library with unmatched performance.

Javascript 的世界有一种痛叫「callback hell」,中文翻译过来叫「回调地狱」,如果能承受得了她带来的痛楚,且继续爱着她,这是「真爱」。Promise的概念,能够让你与javascript好好爱的深沉。
实现Promise的库有很多,我知道的有:

  • Q
  • when
  • bluebird
  • jQuery的deferred
  • javascript自带的Promise(一些高级浏览器内置的Promise对象)

其中,我用的比较顺手的当属bluebird,它也是时下最优秀博客系统Ghost的标配之一。
如果你想深入了解Promise的概念,可以点这里:Promises: The Sync Problem
如果你想珍惜时间,珍惜生命,这里有中文版:深入理解Promise五部曲

Lodash

A JavaScript utility library delivering consistency, modularity, performance, & extras.

我想称它为Javascript的瑞士军刀,或者是一个蓝色工具箱。lodash提供了一系列相当不错的跟函数式编程相关的方法。函数式编程就像搭积木一样,像.identity、.partial、_.compose、splat、unsplat等都是职责单一的函数。别看它们简单,把它们当作积木看待,它们释放的是无尽的活力。 越是简单的东西,蕴藏的越是更为无限的可能性。

Node.bcrypt.js

bcrypt for NodeJs

bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。然而,所提供的所有字符都具有十分重要的意义。密码越强大,您的数据就越安全。而node.bcrypt.js则是披上Nodejs斗篷的bcrypt,它的62.2%是C++代码,而Javascript代码只有30.3%。

Moment

Parse, validate, manipulate, and display dates in javascript.

Moment是一个轻量级用于处理日期的工具,除了对日期进行格式化以外,你还能够对日期进行操作,验证,解析。其在github的star数有1.9W+,比众所周知的Express(github star是1.7w+)还多一点。这么优秀的框架实在是相见恨晚。

Skipper

Streaming multi-uploads for Sails/Express - supports disk, S3, gridfs, and custom file adapters

Skipper是一款Sails衍生的处理多文件上传的组件,支持上传文件到本地或者远端服务器,如果默认adapter没有你需要的服务,你还能够自定义一套adapter满足你的需求。就像我为了把文件上传到又拍云而定制了的adapter: skipper-upyun

Node-fs-extra

Node.js: extra methods for the fs object.

Node-fs-extra提供了一些额外的fs没有的函数,如果Nodejs自带的fs模块,还不能满足你在进行文件操作的使用,或者用着不顺心。不妨来node-fs-extra找一下有没有你想要的解决方案。

Mocha

mocha - simple, flexible, fun javascript test framework for node.js & the browser. (BDD, TDD, QUnit styles via interfaces)

Nodejs单元测试哪家强?
mocha,mocha,似魔鬼的步伐~~yo!

Should

BDD style assertions for node.js -- test framework agnostic

BDD风格的断言模块,旨在让编程像说白话(至少在测试断言上)。

Supertest

Super-agent driven library for testing node.js HTTP servers using a fluent API

如果测试的时候,需要HTTP请求呢?找Supertest吧,和Should同一个作者,TJ大神,你值得信赖。

PM2

Production process manager for Node.JS applications. Perfectly designed for microservice architecture.

Nodejs单线程的特性,意味着,如果你的某一行代码阻塞了,你的整个程序都会崩溃。人非圣贤,孰能无过,没有人能保证自己的写的代码永无BUG(难道要在文件头加上无BUG神兽?)。在生产环境下,如果程序挂了怎么办?让它自动重启呗。
PM2就是一款解决这种问题的工具,当然,作为一个进程管理器,它的作用不仅仅如此。

Markdown-js

A Markdown parser for javascript

Markdown时下越来越受欢迎了,实质上markdown最终是转换成HTML格式才能显示于网页的。而markdown-js则是把markdown格式的文本转化成HTML格式的工具。但是,如果从HTML格式的文本转化成Markdown格式的文本呢?markdown-js好像不支持,那就用to-markdown吧。

后话

本文的描述及用语,仅基于本人目前的水平而写,难免有所局限和措辞不当之处。如果有BUG或者不当之处,欢迎指出与吐槽。


如果本文对您有用
请不要吝啬你们的Follow与Start
这会大大支持我们继续创作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 142,272评论 1 300
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,027评论 1 256
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 93,908评论 0 212
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 40,909评论 0 175
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,638评论 1 255
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,710评论 1 175
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,332评论 2 267
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,125评论 0 165
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 28,938评论 6 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,475评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,244评论 2 214
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,566评论 1 227
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,206评论 0 31
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,095评论 2 213
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,479评论 3 204
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,609评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 25,988评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,480评论 2 230
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,549评论 2 229

推荐阅读更多精彩内容