My Toolkit of Node.js

前言

倘若從去年7月份算起秒梅,我入門(mén)Nodejs也有半年有余了。這半年舌胶,從自學(xué)入門(mén)Nodejs到后來(lái)以前端實(shí)習(xí)生的身份入職魅族捆蜀,再到后來(lái)轉(zhuǎn)型Nodejs開(kāi)發(fā)者,這期間多得有一位嚴(yán)格的「老師」幔嫂,使得我前進(jìn)的步伐非以往的速度能比擬辆它。在學(xué)習(xí),工作的時(shí)候履恩,我也接觸了很多優(yōu)秀的锰茉、實(shí)實(shí)在在能解決日常開(kāi)發(fā)問(wèn)題、提高效率的Nodejs模塊切心,故而羅列出來(lái)飒筑,分享之。

Cheerio

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

Cheerio绽昏,說(shuō)它是服務(wù)器端的jQuery一點(diǎn)也不為過(guò)协屡,在github上也是大受歡迎,star數(shù)達(dá)4500有余而涉,至目前為止著瓶,已經(jīng)有923次commit。它兼容jQuery絕大部分的庫(kù)啼县,以至于你只需要一句$ = require('cheerio').load(YOUR_HTML_CONTENT);材原,便可以像在前端用jQuery一樣的舒暢沸久,愉快。
By the way余蟹,和Cheerio類(lèi)似的框架還有:jsdom卷胯,一個(gè)受歡迎程度略低于Cheerio,但是它有2,147多的commit威酒,可見(jiàn)維護(hù)者之誠(chéng)意窑睁。

Waterline

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

Waterline是從Sails框架衍生出來(lái)的Nodejs平臺(tái)下的ORM,除了支持常見(jiàn)的mysql葵孤、mongodb担钮,還支持PostgreSQL、Redis尤仍、Memory箫津、Disk等等

Bookshelf

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

與Waterline類(lèi)似,但作為同類(lèi)產(chǎn)品且被Ghost選擇標(biāo)配之一的Bookshelf必然有它的特別之處宰啦,仍待君細(xì)細(xì)品來(lái)苏遥。

Node-Soap

A SOAP client and server for node.js.

對(duì)于REST,大家必然熟悉赡模,就算不熟悉田炭,也是久仰其大名,或者是略有耳聞漓柑。REST簡(jiǎn)單而直觀教硫,把HTTP協(xié)議利用到了極限,在這種思想指導(dǎo)下欺缘,它甚至用HTTP請(qǐng)求的頭信息來(lái)指明資源的表示形式栋豫,用HTTP的錯(cuò)誤機(jī)制來(lái)返回訪問(wèn)資源的錯(cuò)誤。但在R.T. Fielding博士在他的論文里提出REST之前谚殊,又是誰(shuí)來(lái)承擔(dān)Web Service這份差使呢丧鸯?
SOAP (Simple Object Access Protocol) 顧名思義,是一個(gè)嚴(yán)格定義的信息交換協(xié)議嫩絮,用于在Web Service中把遠(yuǎn)程調(diào)用和返回封裝成機(jī)器可讀的格式化數(shù)據(jù)丛肢。它基于 XML 格式,在絕大多數(shù)情況下剿干,使用HTTP協(xié)議傳輸WSDL請(qǐng)求蜂怎。
而node-soap模塊,則允許在node環(huán)境中置尔,接入其他程序語(yǔ)言 (諸如 ASP.net杠步、Java 等) 開(kāi)發(fā)的WebService。也能夠在node中開(kāi)發(fā)基于SOAP的WebService供其他程序調(diào)用。
當(dāng)然幽歼,在大多數(shù)情況下朵锣,過(guò)去SOAP能做的事,REST也是能做到的甸私,且REST更加優(yōu)雅诚些,簡(jiǎn)單。以我的水平皇型,我也是想不清楚SOAP依然存在的必然性诬烹,但是有那么一句話:「存在,就是合理的」弃鸦。既然绞吁,它存在,也有人用到寡键,那么在合作開(kāi)發(fā)中和SOAP相遇也是有可能性的掀泳,相信那是我們的緣分。
如果你有興趣西轩,聽(tīng)一下我和SOAP邂逅的故事:SOAP,Web service的樞紐

Passport

Simple, unobtrusive authentication for Node.js.

如果你的站點(diǎn)想快速建立passport-user結(jié)構(gòu)的用戶系統(tǒng)脑沿,且能夠簡(jiǎn)單的接入流行的第三方登錄藕畔,用passport就沒(méi)錯(cuò)了。它不但提供了本站登錄的解決方案庄拇,還有一大堆第三方登錄的策略注服,見(jiàn):Strategies
如果你用Sails的話,這里還有一個(gè)承接Sails和passport的模塊:sails-generate-auth

Bluebird

Bluebird is a full featured promise library with unmatched performance.

Javascript 的世界有一種痛叫「callback hell」措近,中文翻譯過(guò)來(lái)叫「回調(diào)地獄」溶弟,如果能承受得了她帶來(lái)的痛楚,且繼續(xù)愛(ài)著她瞭郑,這是「真愛(ài)」辜御。Promise的概念,能夠讓你與javascript好好愛(ài)的深沉屈张。
實(shí)現(xiàn)Promise的庫(kù)有很多擒权,我知道的有:

  • Q
  • when
  • bluebird
  • jQuery的deferred
  • javascript自帶的Promise(一些高級(jí)瀏覽器內(nèi)置的Promise對(duì)象)

其中,我用的比較順手的當(dāng)屬bluebird阁谆,它也是時(shí)下最優(yōu)秀博客系統(tǒng)Ghost的標(biāo)配之一碳抄。
如果你想深入了解Promise的概念,可以點(diǎn)這里:Promises: The Sync Problem
如果你想珍惜時(shí)間场绿,珍惜生命剖效,這里有中文版:深入理解Promise五部曲

Lodash

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

我想稱(chēng)它為Javascript的瑞士軍刀,或者是一個(gè)藍(lán)色工具箱。lodash提供了一系列相當(dāng)不錯(cuò)的跟函數(shù)式編程相關(guān)的方法璧尸。函數(shù)式編程就像搭積木一樣劝贸,像.identity、.partial逗宁、_.compose映九、splat、unsplat等都是職責(zé)單一的函數(shù)瞎颗。別看它們簡(jiǎn)單件甥,把它們當(dāng)作積木看待,它們釋放的是無(wú)盡的活力哼拔。 越是簡(jiǎn)單的東西引有,蘊(yùn)藏的越是更為無(wú)限的可能性。

Node.bcrypt.js

bcrypt for NodeJs

bcrypt倦逐,是一個(gè)跨平臺(tái)的文件加密工具譬正。由它加密的文件可在所有支持的操作系統(tǒng)和處理器上進(jìn)行轉(zhuǎn)移。它的口令必須是8至56個(gè)字符檬姥,并將在內(nèi)部被轉(zhuǎn)化為448位的密鑰曾我。然而,所提供的所有字符都具有十分重要的意義健民。密碼越強(qiáng)大抒巢,您的數(shù)據(jù)就越安全。而node.bcrypt.js則是披上Nodejs斗篷的bcrypt秉犹,它的62.2%是C++代碼蛉谜,而Javascript代碼只有30.3%。

Moment

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

Moment是一個(gè)輕量級(jí)用于處理日期的工具崇堵,除了對(duì)日期進(jìn)行格式化以外型诚,你還能夠?qū)θ掌谶M(jìn)行操作,驗(yàn)證鸳劳,解析狰贯。其在github的star數(shù)有1.9W+,比眾所周知的Express(github star是1.7w+)還多一點(diǎn)棍辕。這么優(yōu)秀的框架實(shí)在是相見(jiàn)恨晚暮现。

Skipper

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

Skipper是一款Sails衍生的處理多文件上傳的組件,支持上傳文件到本地或者遠(yuǎn)端服務(wù)器楚昭,如果默認(rèn)adapter沒(méi)有你需要的服務(wù)栖袋,你還能夠自定義一套adapter滿足你的需求。就像我為了把文件上傳到又拍云而定制了的adapter: skipper-upyun

Node-fs-extra

Node.js: extra methods for the fs object.

Node-fs-extra提供了一些額外的fs沒(méi)有的函數(shù)抚太,如果Nodejs自帶的fs模塊塘幅,還不能滿足你在進(jìn)行文件操作的使用昔案,或者用著不順心。不妨來(lái)node-fs-extra找一下有沒(méi)有你想要的解決方案电媳。

Mocha

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

Nodejs單元測(cè)試哪家強(qiáng)踏揣?
mocha,mocha匾乓,似魔鬼的步伐~~yo!

Should

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

BDD風(fēng)格的斷言模塊捞稿,旨在讓編程像說(shuō)白話(至少在測(cè)試斷言上)。

Supertest

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

如果測(cè)試的時(shí)候拼缝,需要HTTP請(qǐng)求呢娱局?找Supertest吧,和Should同一個(gè)作者咧七,TJ大神衰齐,你值得信賴(lài)。

PM2

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

Nodejs單線程的特性继阻,意味著耻涛,如果你的某一行代碼阻塞了,你的整個(gè)程序都會(huì)崩潰瘟檩。人非圣賢抹缕,孰能無(wú)過(guò),沒(méi)有人能保證自己的寫(xiě)的代碼永無(wú)BUG(難道要在文件頭加上無(wú)BUG神獸芒帕?)歉嗓。在生產(chǎn)環(huán)境下,如果程序掛了怎么辦背蟆?讓它自動(dòng)重啟唄。
PM2就是一款解決這種問(wèn)題的工具哮幢,當(dāng)然带膀,作為一個(gè)進(jìn)程管理器,它的作用不僅僅如此橙垢。

Markdown-js

A Markdown parser for javascript

Markdown時(shí)下越來(lái)越受歡迎了垛叨,實(shí)質(zhì)上markdown最終是轉(zhuǎn)換成HTML格式才能顯示于網(wǎng)頁(yè)的。而markdown-js則是把markdown格式的文本轉(zhuǎn)化成HTML格式的工具柜某。但是嗽元,如果從HTML格式的文本轉(zhuǎn)化成Markdown格式的文本呢?markdown-js好像不支持喂击,那就用to-markdown吧剂癌。

后話

本文的描述及用語(yǔ),僅基于本人目前的水平而寫(xiě)翰绊,難免有所局限和措辭不當(dāng)之處佩谷。如果有BUG或者不當(dāng)之處旁壮,歡迎指出與吐槽。


如果本文對(duì)您有用
請(qǐng)不要吝嗇你們的Follow與Start
這會(huì)大大支持我們繼續(xù)創(chuàng)作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谐檀,一起剝皮案震驚了整個(gè)濱河市抡谐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐猬,老刑警劉巖麦撵,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溃肪,居然都是意外死亡免胃,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)乍惊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杜秸,“玉大人,你說(shuō)我怎么就攤上這事润绎∏说” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵莉撇,是天一觀的道長(zhǎng)呢蛤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)棍郎,這世上最難降的妖魔是什么其障? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涂佃,結(jié)果婚禮上励翼,老公的妹妹穿的比我還像新娘。我一直安慰自己辜荠,他們只是感情好汽抚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著伯病,像睡著了一般造烁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上午笛,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天惭蟋,我揣著相機(jī)與錄音,去河邊找鬼药磺。 笑死告组,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的与涡。 我是一名探鬼主播惹谐,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼持偏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了氨肌?” 一聲冷哼從身側(cè)響起鸿秆,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎囚,沒(méi)想到半個(gè)月后卿叽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恳守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年考婴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慧邮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能岩。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昔头,靈堂內(nèi)的尸體忽然破棺而出伊群,到底是詐尸還是另有隱情考杉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布舰始,位于F島的核電站崇棠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丸卷。R本人自食惡果不足惜枕稀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谜嫉。 院中可真熱鬧萎坷,春花似錦、人聲如沸沐兰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)僧鲁。三九已至,卻和暖如春象泵,著一層夾襖步出監(jiān)牢的瞬間寞秃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工偶惠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留春寿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓忽孽,卻偏偏與公主長(zhǎng)得像绑改,于是被迫代替她去往敵國(guó)和親谢床。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容