干貨 | Node.js有用的功能組件

1.數(shù)據(jù)庫(kù)操作

1.1 mongoose

mongoose是一款Node.js便捷操作MongoDB的對(duì)象模型工具。

mongoose

安裝

npm install mongoose

簡(jiǎn)單使用(摘自官網(wǎng))

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

var Cat = mongoose.model('Cat', { name: String });

var kitty = new Cat({ name: 'Zildjian' });
kitty.save(function (err) {
  if (err) {
    console.log(err);
  } else {
    console.log('meow');
  }
});

注意:需要先運(yùn)行 MongoDB 服務(wù)


官網(wǎng)資料

MongoDB: https://www.mongodb.com/
Mongoose: http://mongoosejs.com/


關(guān)于如何使用MongoDB和Mongoose蛾方,歡迎閱讀我的文章:

MongoDB基礎(chǔ)0——MongoDB的安裝與可視化管理工具
MongoDB基礎(chǔ)1——數(shù)據(jù)庫(kù)基本操作
MongoDB基礎(chǔ)2——Mongoose的操作指南
MongoDB基礎(chǔ)3——Mongoose的數(shù)據(jù)交互問(wèn)題
MongoDB基礎(chǔ)4——安全與身份認(rèn)證
MongoDB基礎(chǔ)X——踩過(guò)的坑以及解決方案(持續(xù)更新中)


1.2 redis

Redis 是一個(gè)開(kāi)源(BSD許可)的阎肝,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)蒂教,它可以用作數(shù)據(jù)庫(kù)倾剿、緩存和消息中間件窜锯。 它支持多種類型的數(shù)據(jù)結(jié)構(gòu)艘刚,如 字符串(strings)管宵, 散列(hashes), 列表(lists)攀甚, 集合(sets)箩朴, 有序集合(sorted sets) 與范圍查詢, bitmaps秋度, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢炸庞。 Redis 內(nèi)置了 復(fù)制(replication),LUA腳本(Lua scripting)荚斯, LRU驅(qū)動(dòng)事件(LRU eviction)埠居,事務(wù)(transactions) 和不同級(jí)別的 磁盤持久化(persistence), 并通過(guò) Redis哨兵(Sentinel)和自動(dòng) 分區(qū)(Cluster)提供高可用性(high availability)事期。

資料來(lái)源 - Redis 中文官網(wǎng): http://www.redis.cn/


這里所說(shuō)的redis是Node.js對(duì)redis數(shù)據(jù)庫(kù)進(jìn)行操作的一個(gè)中間件滥壕。


安裝

npm install redis --save

簡(jiǎn)單使用(摘自官網(wǎng))

var redis = require("redis"),
    client = redis.createClient();

// if you'd like to select database 3, instead of 0 (default), call
// client.select(3, function() { /* ... */ });

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("string key", "string val", redis.print);
client.hset("hash key", "hashtest 1", "some value", redis.print);
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) {
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
        console.log("    " + i + ": " + reply);
    });
    client.quit();
});

github: https://github.com/NodeRedis/node_redis
npm: https://www.npmjs.com/package/redis


關(guān)于redis在Node.js中的應(yīng)用,可閱讀我的文章:
《Node.js的Redis簡(jiǎn)單例子》


1.2 mysql

A pure node.js JavaScript Client implementing the MySql protocol.


安裝

npm install mysql

簡(jiǎn)單使用(摘自官網(wǎng))

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

connection.end();

Github地址: https://github.com/mysqljs/mysql


2.網(wǎng)絡(luò)

2.1 http-proxy

安裝

npm install http-proxy --save

簡(jiǎn)單使用(摘自官網(wǎng))

var http = require('http'),
    httpProxy = require('http-proxy');

//
// Create a proxy server with custom application logic
//
var proxy = httpProxy.createProxyServer({});

//
// Create your custom server and just call `proxy.web()` to proxy
// a web request to the target passed in the options
// also you can use `proxy.ws()` to proxy a websockets request
//
var server = http.createServer(function(req, res) {
  // You can define here your custom logic to handle the request
  // and then proxy the request.
  proxy.web(req, res, { target: 'http://127.0.0.1:5060' });
});

console.log("listening on port 5050")
server.listen(5050);

github: https://github.com/nodejitsu/node-http-proxy


歡迎閱讀我的文章:
《http-proxy反向代理以調(diào)度服務(wù)器各app》


2.2 request

request是node.js的一個(gè)中間件兽泣,用它可以通過(guò)服務(wù)器請(qǐng)求url并返回?cái)?shù)據(jù)绎橘。

request可以作為Node.js爬蟲(chóng)爬取網(wǎng)絡(luò)資源的工具,也可以使用它來(lái)實(shí)現(xiàn)oAuth登錄唠倦。

更多資料称鳞,可參考:《Request —— 讓 Node.js http請(qǐng)求變得超簡(jiǎn)單》


安裝

npm install request --save

簡(jiǎn)單使用(摘自官網(wǎng))

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

Github:https://github.com/request/request


2.3 cheerio

像jQuery操作網(wǎng)頁(yè)一樣在服務(wù)端操作抓取的網(wǎng)頁(yè)數(shù)據(jù):Fast, flexible & lean implementation of core jQuery designed specifically for the server.


安裝

npm install cheerio --save

簡(jiǎn)單使用(摘自官網(wǎng))

const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>')

$('h2.title').text('Hello there!')
$('h2').addClass('welcome')

$.html()
//=> <h2 class="title welcome">Hello there!</h2>

request的應(yīng)用:
Node.js通過(guò)微信網(wǎng)頁(yè)授權(quán)機(jī)制獲取用戶信息
衛(wèi)星信息抓取工具SatCapturer


Github:https://github.com/cheeriojs/cheerio


3.發(fā)送郵件

3.1 Nodemailer

Nodemailer

Nodemailer 是一款Node.js用于發(fā)送郵件的中間件,您可以使用自己的郵箱帳戶和密碼稠鼻,通過(guò)此中間件來(lái)發(fā)送郵件胡岔。

Nodemailer支持批量發(fā)送給多個(gè)郵箱,支持抄送和密送枷餐;此外靶瘸,它還支持發(fā)送帶附件的郵件苫亦。

Nodemailer遵循MIT許可,您可以將它作為網(wǎng)站服務(wù)郵箱的發(fā)送引擎怨咪,用于推送網(wǎng)站服務(wù)信息屋剑。

關(guān)于Nodemailer的許可:License


安裝

npm install nodemailer --save

使用(來(lái)自官網(wǎng))

'use strict';
const nodemailer = require('nodemailer');

// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
    host: 'smtp.example.com',
    port: 465,
    secure: true, // secure:true for port 465, secure:false for port 587
    auth: {
        user: 'username@example.com',
        pass: 'userpass'
    }
});

// setup email data with unicode symbols
let mailOptions = {
    from: '"Fred Foo ??" <foo@blurdybloop.com>', // sender address
    to: 'bar@blurdybloop.com, baz@blurdybloop.com', // list of receivers
    subject: 'Hello ?', // Subject line
    text: 'Hello world ?', // plain text body
    html: '<b>Hello world ?</b>' // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message %s sent: %s', info.messageId, info.response);
});

其使用案例可以參考我的一篇文章:
《Node.js使用NodeMailer發(fā)送郵件》

地址:Nodemailer


4.視頻處理

4.1 ffmpeg

ffmpeg

首先,F(xiàn)Fmpeg是一款跨平臺(tái)的全功能音視頻處理解決方案诗眨。

它可以對(duì)音視頻進(jìn)行錄制唉匾、轉(zhuǎn)碼(h.264、mpeg4匠楚、AAC等)巍膘、切割,可以將其封裝為不同格式(m3u8芋簿、mp4峡懈、stream等)。

FFmpeg可以安裝在Linux与斤、MacOS和Windows中肪康。


fluent-ffmpeg 是基于FFmpeg的一款Node.js中間件。它的所有功能都是以FFmpeg為基礎(chǔ)的撩穿,因此使用前必須先安裝FFmpeg磷支。

fluent-ffmpeg將FFmpeg的命令轉(zhuǎn)換為"fluent",和鏈?zhǔn)秸{(diào)用一樣食寡,讓node.js程序更好地調(diào)用FFmpeg命令雾狈。


篇幅所限,關(guān)于 FFmpegfluent-ffmpeg 的安裝和使用案例的詳細(xì)內(nèi)容抵皱,歡迎閱讀我的另一篇文章:
《Node.js調(diào)用FFmpeg對(duì)視頻進(jìn)行切片》


安裝

npm install fluent-ffmpeg

簡(jiǎn)單使用(摘自官方github頁(yè)面):

var ffmpeg = require('fluent-ffmpeg');

ffmpeg()
  .input('/dev/video0')
  .inputFormat('mov')
  .input('/path/to/file.avi')
  .inputFormat('avi');

地址:fluent-ffmpeg


5.壓縮文件(夾)

5.1 archiver

archiver是一款node.js的打包文件箍邮、文件夾的工具,它可以打包單個(gè)文件叨叙、子文件夾下所有文件锭弊、字符串、buffer等類型數(shù)據(jù)到一個(gè)zip包里擂错。


安裝

npm install archiver --save

簡(jiǎn)單使用(摘自官網(wǎng))

// require modules
var fs = require('fs');
var archiver = require('archiver');

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + '/example.zip');
var archive = archiver('zip', {
    zlib: { level: 9 } // Sets the compression level.
});

// listen for all archive data to be written
output.on('close', function() {
  console.log(archive.pointer() + ' total bytes');
  console.log('archiver has been finalized and the output file descriptor has closed.');
});

// good practice to catch warnings (ie stat failures and other non-blocking errors)
archive.on('warning', function(err) {
  if (err.code === 'ENOENT') {
      // log warning
  } else {
      // throw error
      throw err;
  }
});

// good practice to catch this error explicitly
archive.on('error', function(err) {
  throw err;
});

// pipe archive data to the file
archive.pipe(output);

// append a file from stream
var file1 = __dirname + '/file1.txt';
archive.append(fs.createReadStream(file1), { name: 'file1.txt' });

// append a file from string
archive.append('string cheese!', { name: 'file2.txt' });

// append a file from buffer
var buffer3 = Buffer.from('buff it!');
archive.append(buffer3, { name: 'file3.txt' });

// append a file
archive.file('file1.txt', { name: 'file4.txt' });

// append files from a sub-directory and naming it `new-subdir` within the archive
archive.directory('subdir/', 'new-subdir');

// append files from a sub-directory, putting its contents at the root of archive
archive.directory('subdir/', false);

// append files from a glob pattern
archive.glob('subdir/*.txt');

// finalize the archive (ie we are done appending files but streams have to finish yet)
archive.finalize();

官網(wǎng):https://archiverjs.com/docs/#quick-start


6.管理工具

6.1 pm2

啟動(dòng)的應(yīng)用

pm2是一款管理node.js應(yīng)用的工具味滞。它可以讓你的node應(yīng)用運(yùn)行在后臺(tái),隨時(shí)查看每個(gè)應(yīng)用的狀態(tài)(占用資源钮呀、重啟次數(shù)剑鞍、持續(xù)時(shí)長(zhǎng)、CPU使用爽醋、打印等)蚁署。

此外,pm2還支持自動(dòng)重啟:當(dāng)你的node應(yīng)用代碼有更新后蚂四,自動(dòng)重啟服務(wù)光戈。這個(gè)適用于調(diào)試的時(shí)候哪痰。


安裝

npm install pm2 -g

注意這里要加上 -g,表示此工具要安裝到全局命令中久妆。Linux系統(tǒng)可能還要手動(dòng)操作添加鏈接晌杰。


相關(guān)使用幫助可閱讀:
《用pm2管理node.js應(yīng)用》


6.2 Supervisor

相比較pm2,Supervisor似乎看起來(lái)更適合用于調(diào)試代碼筷弦,便捷的啟動(dòng)方式肋演、監(jiān)控代碼變化自動(dòng)重啟服務(wù)都為我們開(kāi)發(fā)量身定做。


安裝

npm install supervisor -g

注意這里要加上 -g烂琴,表示此工具要安裝到全局命令中爹殊。Linux系統(tǒng)可能還要手動(dòng)操作添加鏈接。


7.加密奸绷、簽名和校驗(yàn)

7.1 crypto

https://nodejs.org/api/crypto.html

相關(guān)資料:RSA簽名與驗(yàn)證


相關(guān)使用幫助可閱讀:
《詳細(xì)版 | 用Supervisor守護(hù)你的Node.js進(jìn)程》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梗夸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子健盒,更是在濱河造成了極大的恐慌,老刑警劉巖称簿,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扣癣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡憨降,警方通過(guò)查閱死者的電腦和手機(jī)父虑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)授药,“玉大人士嚎,你說(shuō)我怎么就攤上這事』谶矗” “怎么了莱衩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)娇澎。 經(jīng)常有香客問(wèn)我笨蚁,道長(zhǎng),這世上最難降的妖魔是什么趟庄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任括细,我火速辦了婚禮,結(jié)果婚禮上戚啥,老公的妹妹穿的比我還像新娘奋单。我一直安慰自己,他們只是感情好猫十,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布览濒。 她就那樣靜靜地躺著呆盖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匾七。 梳的紋絲不亂的頭發(fā)上絮短,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音昨忆,去河邊找鬼丁频。 笑死,一個(gè)胖子當(dāng)著我的面吹牛邑贴,可吹牛的內(nèi)容都是我干的席里。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拢驾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奖磁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起繁疤,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咖为,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后稠腊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體躁染,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年架忌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吞彤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叹放,死狀恐怖饰恕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情井仰,我是刑警寧澤埋嵌,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站俱恶,受9級(jí)特大地震影響莉恼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜速那,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一俐银、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧端仰,春花似錦捶惜、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汽久。三九已至,卻和暖如春踊餐,著一層夾襖步出監(jiān)牢的瞬間景醇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工吝岭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留三痰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓窜管,卻偏偏與公主長(zhǎng)得像散劫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幕帆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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