NodeJS常用模塊介紹

收集了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應用框架,支持服務器端和客戶端。restify比起express更專注于REST服務,去掉了express中的 template, render等功能,同時強化了REST協議使用,版本化支持,HTTP的異常處理。

hapi是一個用來構建基于 Node.js 的應用和服務的富框架,使得開發者把重點放在便攜可重用的應用邏輯而不是構建架構。內建輸入驗證、緩存、認證和其他 Web 應用開發常用的功能,用來開發rest代碼也是一個不錯的選擇。
前端模板 - EJS

EJS是一個功能強大又比較容易使用的前端模板,Express對EJS支持比較好,它的語法比較接近前端開發人員的使用方式。另外名氣比較大的前端模板是Jade,它和Express是同一個作者開發的,Express默認用的就是Jade模板,但是它的語法更接近后端語言的語法,前端開發人員很多時候難以適應,但是它的功能確實非常強大。
數據庫驅動 - Mongoose

MongoDB和NodeJS應該是最佳搭檔了,而Mongoose是MongoDB的對象模型工具,通過Mongoose框架,可以進行非常方便的訪問MongoDB的操作。當然如果你對性能要求非常高的話,也可以考慮使用mongodb,它功能相對較少,比較底層一些,其實Mongoose就是基于它構建的。

其它:redis,mysql。
Web Socket - Socket.IO

NodeJS的一個主要優點是高并發,因此NodeJS是Web Socket服務器的理想選擇,而Socket.IO則Socket模塊的不二選擇,可以用于構建聊天室、客服系統等。Socket.IO不僅提供了服務 器端代碼,還提供了前端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應用的進程管理器。當你要把你的獨立代碼利用全部的服務器上的所有CPU,并保證進程永遠都活著,0秒的重載。

如果你想要從操作系統的層次來解決NodeJS服務器管理問題,可以參考: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的語法就可以很容易上手。

另外一個名氣比較大且功能比較強大的定時模塊是Later,對于功能要求比較高的可用用它,later的缺點是有點復雜,不像cron只要拿來就會用了。
工具包

underscore是一個JS工具庫,主要提供了對數組,對象,函數等一些基礎工具函數,可以同時在瀏覽器和NodeJS環境中運行。建議在每個項目中使用。

moment是一個日期工具庫,主要提供了對日期的解析,驗證,操作和格式化等,如果需要對日期作較多的操作或比較復雜的操作,則它是一個不錯的選擇,畢竟JS自帶的Date功能太弱了。

Connect是一系列的中間件的集合,包括日志,session, cookie, body parser等,它做了大量HTTP相關的基礎性的工作,Express框架就依賴它進行工作的。
單元測試

Mocha,Karma,Jasmine。
參考文獻

從零開始nodejs系列文章
Node.JS 學習路線圖
NPM官網

轉載于:https://www.cnblogs.com/zhengyuan1314/p/7062158.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java泛型面試問題

Java面試中的通用面試問題在相當長的時間內在Java 5周圍越來越普遍,許多應用程序都轉移到Java 5上,并且幾乎所有新的Java開發都發生在Tiger(Java 5的代號)上。 泛型和Java 5功能(例如Enum)的重要性&#xf…

隱層元素閃一下_太陽一直依靠什么元素在燃燒,地球上的重元素又是怎么來的?...

本文基于回答網友一個這樣的問題:太陽目前氫核聚變是氦碳氧穩定燃燒地球上的鐵鎳重元素哪里來的?可以說,這是一個毫無邏輯亂七八糟的問題,但既然邀請回答,就從中挑出幾個稍顯合理的問題說明一下。太陽核心每時每刻都在…

基于Token的WEB后臺認證機制

基于Token的WEB后臺認證機制 幾種常用的認證機制 HTTP Basic Auth HTTP Basic Auth簡單點說明就是每次請求API時都提供用戶的username和password,簡言之,Basic Auth是配合RESTful API 使用的最簡單的認證方式,只需提供用戶名密碼即可&#xf…

JSF基于事件的溝通:過時的方法

用JSF編寫的Web應用程序由相互交互的bean組成。 在開發Web應用程序時,bean之間的通信是主要的設計模式之一。 有時,一個bean需要向其他bean發送事件,以通知它們某些更改或其他任何更改。 我們通常可以將托管bean或Spring bean注入另一個bean的…

mysql調優 基礎

MySQL調優可以從幾個方面來做:1. 架構層:做從庫,實現讀寫分離;2.系統層次:增加內存;給磁盤做raid0或者raid5以增加磁盤的讀寫速度;可以重新掛載磁盤,并加上noatime參數,這…

saltstack

第一:安裝前準備: 聲明我用的是ubuntu 16.04的系統 1.修改主機名,并保證兩臺機器可以互相ping同主機名 ip1 master_hostname ip2 slave_hostname 第二:安裝 服務器安裝 yum install salt-master -y客戶端安裝 yum install salt…

ios 百度地圖指定區域_獲取百度地圖可視區域范圍的數據

有個業務場景,需要根據獲取到的地圖區域顯示,根據相應的經緯度反查 左側區域的會議室。思路:1.得到百度地圖可視區域--可視區域的中心點2.可視區域的四個角的其中兩個(東北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采樣器擴展JMeter

JMeter沒有對WS-Security或WS-Trust的任何內置支持,這使我為JMeter開發了此STS Sampler –可以在負載測試STS時使任何人的生活變得更好。 首先,您需要擁有Apache JMeter發行版。 我正在使用v2.7。 然后,您可以從此處下載sts.sampler.zip –解…

分享一個使用閉包對一個對象繼承方式

function Person(name,age){this.name name;this.age age; }//定義一個new函數 繼承了對Person的繼承 function New(obj){return function(){var o {"__proto__":obj.proto};obj.apply(o,arguments);}return obj; }var n new New(Person)("對象繼承了person…

vue怎么改logo_vue全家桶項目構建教程

前言vue是現階段很流行的前端框架,很多人通過vue官方文檔的學習,對vue的使用都有了一定的了解,但再在項目工程化處理的時候,卻發現不知道改怎么更好的管理自己的項目,如何去引入一些框架以及vue全家桶其他框架的使用&a…

EclipseLink MOXy作為JAXB提供者

EclipseLink MOXy是JAXB提供程序,并且是內置在JDK中的默認JAXB提供程序的引人注目的替代品。 首先是一個簡單的測試,將Java對象編組為XML: 這是模型: XmlRootElement(nameMemberDetailsRequest, namespacehttp://bk.org/members…

monkeyrunner多點觸摸

思路是:在屏幕上某個位置按著不放:device.touch(x,y,md.DOWN) 然后再做一個滑動的操作:device.drap((x1,y1),(x2,y2),0.2,10) 然后再松開按鍵:device.touch(x,y,md.UP) #codeing:utf-8 from com.android.monkeyrunner import Monk…

雅虎前端優化的35條軍規

閱讀目錄 內容部分css部分js部分javascript, css 圖片 cookie移動端 服務器摘要:無論是在工作中,還是在面試中,web前端性能的優化都是很重要的,那么我們進行優化需要從哪些方面入手呢?可以遵循雅虎的前端優化34條軍規&…

stm32 內部sram大小_在SRAM、FLASH中調試代碼的配置方法(附詳細步驟)

聊天界面發送嵌入式大雜燴獲取1TB大雜燴資料包STM32的FLASH擦寫次數有限(大概為1萬次),所以為了延長FLASH的使用時間,我們平時調試時可以選擇在SRAM中進行硬件調試。除此之外,SRAM 存儲器的寫入速度比在內部 FLASH 中要快得多,所以…

Spring Profile模式示例

最近,我們介紹了Spring Profiles的概念。 此概念是針對不同部署環境的輕松配置區分符。 直接的用例(已提出)是對相關類進行注釋,以便Spring根據活動的配置文件加載適當的類。 但是,這種方法可能并不總是適用于常見的…

Android 樣式 (style) 和主題(theme)

轉載:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 樣式和主題 樣式是指為 View 或窗口指定外觀和格式的屬性集合。樣式可以指定高度、填充、字體顏色、字號、背景色等許多屬性。 樣式是在與指定布局的 XML 不同的 XML 資源中進行定義。 Android 中的樣式與…

自定義控件_VIewPager顯示多個Item

一直以來想搞明白這個不完全的VIewPager是怎么做到的&#xff0c;有幸看到這片篇文章 有二種實現方法 1.設置的屬性 1.clipChildren屬性 2.setPageMargin 3.更新Item外界面 2.重寫getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…

華為怎么改輸入法皮膚_微信和QQ個性鍵盤皮膚

hello大家好&#xff0c;今天是2019年1月1號&#xff0c;祝大家新年快樂今天是新年的第一天&#xff0c;所以說給大家介紹一個好玩的&#xff0c;微信和QQ都能設置的個性的鍵盤皮膚&#xff0c;看下圖&#xff0c;這樣的個性的鍵盤主題怎么設置呢&#xff1f;其實很簡單&#x…

EasyMock教程–入門

在本文中&#xff0c;我將向您展示EasyMock是什么&#xff0c;以及如何使用它來測試Java應用程序。 為此&#xff0c;我將創建一個簡單的Portfolio應用程序&#xff0c;并使用JUnit&#xff06;EasyMock庫對其進行測試。 在開始之前&#xff0c;讓我們首先了解使用EasyMock的需…

synchronized內置鎖

synchronized內置鎖&#xff0c;如果發生阻塞&#xff0c;無法被中斷&#xff0c;除非關閉jvm.因此不能從死鎖中恢復。轉載于:https://www.cnblogs.com/paulbai/p/6163250.html