Node.js的工具箱

jopen 9年前發布 | 39K 次閱讀 Node.js Node.js 開發

前言

倘若從去年7月份算起,我入門Nodejs也有半年有余了。這半年,從自學入門Nodejs到后來以前端實習生的身份入職魅族,再到后來轉型 Nodejs開發者,這期間多得有一位嚴格的「老師」,使得我前進的步伐非以往的速度能比擬。在學習,工作的時候,我也接觸了很多優秀的、實實在在能解決日常開發問題、提高效率的Nodejs模塊,故而羅列出來,分享之。

Cheerio

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

</blockquote>

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

</blockquote>

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

</blockquote>

與Waterline類似,但作為同類產品且被Ghost選擇標配之一的Bookshelf必然有它的特別之處,仍待君細細品來。

Node-Soap

A SOAP client and server for node.js.

</blockquote>

對于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.

</blockquote>

如果你的站點想快速建立passport-user結構的用戶系統,且能夠簡單的接入流行的第三方登錄,用passport就沒錯了。它不但提供了本站登錄的解決方案,還有一大堆第三方登錄的策略,見:Strategies
如果你用Sails的話,這里還有一個承接Sails和passport的模塊:sails-generate-auth

Bluebird

Bluebird is a full featured promise library with unmatched performance.

</blockquote>

Javascript 的世界有一種痛叫「callback hell」,中文翻譯過來叫「回調地獄」,如果能承受得了她帶來的痛楚,且繼續愛著她,這是「真愛」。Promise的概念,能夠讓你與javascript好好愛的深沉。
實現Promise的庫有很多,我知道的有:

  • Q
  • when
  • bluebird
  • jQuery的deferred
  • javascript自帶的Promise(一些高級瀏覽器內置的Promise對象)
  • </ul>

    其中,我用的比較順手的當屬bluebird,它也是時下最優秀博客系統Ghost的標配之一。
    如果你想深入了解Promise的概念,可以點這里:Promises: The Sync Problem
    如果你想珍惜時間,珍惜生命,這里有中文版:深入理解Promise五部曲

    Lodash

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

    </blockquote>

    我想稱它為Javascript的瑞士軍刀,或者是一個藍色工具箱。lodash提供了一系列相當不錯的跟函數式編程相關的方法。函數式編程就像搭積木一樣,像.identity、.partial、_.compose、splat、unsplat等都是職責單一的函數。別看它們簡單,把它們當作積木看待,它們釋放的是無盡的活力。 越是簡單的東西,蘊藏的越是更為無限的可能性。

    Node.bcrypt.js

    bcrypt for NodeJs

    </blockquote>

    bcrypt,是一個跨平臺的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字符,并將在內部被轉化為448位的密鑰。然而,所提供的所有字符都具有十分重要的意義。密碼越強大,您的數據就越安全。而node.bcrypt.js則是披上 Nodejs斗篷的bcrypt,它的62.2%是C++代碼,而Javascript代碼只有30.3%。

    Moment

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

    </blockquote>

    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

    </blockquote>

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

    Node-fs-extra

    Node.js: extra methods for the fs object.

    </blockquote>

    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)

    </blockquote>

    Nodejs單元測試哪家強?
    mocha,mocha,似魔鬼的步伐~~yo!

    Should

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

    </blockquote>

    BDD風格的斷言模塊,旨在讓編程像說白話(至少在測試斷言上)。

    Supertest

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

    </blockquote>

    如果測試的時候,需要HTTP請求呢?找Supertest吧,和Should同一個作者,TJ大神,你值得信賴。

    PM2

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

    </blockquote>

    Nodejs單線程的特性,意味著,如果你的某一行代碼阻塞了,你的整個程序都會崩潰。人非圣賢,孰能無過,沒有人能保證自己的寫的代碼永無BUG(難道要在文件頭加上無BUG神獸?)。在生產環境下,如果程序掛了怎么辦?讓它自動重啟唄。
    PM2就是一款解決這種問題的工具,當然,作為一個進程管理器,它的作用不僅僅如此。

    Markdown-js

    A Markdown parser for javascript

    </blockquote>

    Markdown時下越來越受歡迎了,實質上markdown最終是轉換成HTML格式才能顯示于網頁的。而markdown-js則是把 markdown格式的文本轉化成HTML格式的工具。但是,如果從HTML格式的文本轉化成Markdown格式的文本呢?markdown-js好像不支持,那就用to-markdown吧。

    后話

    本文的描述及用語,僅基于本人目前的水平而寫,難免有所局限和措辭不當之處。如果有BUG或者不當之處,歡迎指出與吐槽。

    來自:http://www.jianshu.com/p/f8d7150259a1

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!