從零單排的nodejs

nodejs使用簡要

給個理由

能用javaScript寫后臺,還需要什么理由.

從安裝開始

1. 在windows上我就不多說
2. 在linux上,使用apt-get一類的方式安裝之外,還可以通過編譯安裝.
  1. 確保系統(tǒng)下g++版本在4.6以上,Python版本在2.6以上.
  2. 從[nodejs.org](https://nodejs.org)下載tar.gz后綴的NodeJS最新版源代碼包并解壓到某個位置.
  
3. 進入解壓到的目錄,使用以下命令編譯和安裝.
         $ ./configure
         $ make
         $ sudo make install
4. 開始運行
    打開終端,鍵入`node`進入命令交互模式,可以輸入一條代碼后立即執(zhí)行并顯示結(jié)果
     ```shell
     $ node
     > console.log('hello world!')
     hello world!
     ```
    當然,一般咱們是先寫一個`js`文件,然后在終端的目錄下鍵入`node xx.js`運行

更新及版本選擇

1. 可以使用nvm以及n來進行版本管理(簡單說說),下面兩個用一個就好。
2. n如何使用
$ sudo npm install n -g
$ sudo n stable     //升級node至最新的穩(wěn)定版
$ sudo n latest     //安裝最新版
$ sudo n 6.4.0      //安裝指定版本
3. nvm如何使用(nvm不依賴npm)
    1. 通過腳本文件自動安裝(apt-get/yum)
    2. 通過源碼安裝
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ cd ~/.nvm
$ source ~/.nvm/nvm.sh # 將這一行加入到shell配置文件中堰汉,根據(jù)環(huán)境不同,可能是~/.bashrc, ~/.profile, 或 ~/.zshrc
    3. 如何使用
安裝某版本的node
$ nvm install 0.10.26 #安裝nodejs v0.10.26   
刪除某版本的node
$ nvm uninstall 0.10.26
$ nvm uninstall default

模塊

當我們需要寫稍大點的程序,不可能都放在一個文件里,所以一般都會將代碼模塊化.
Node.js采用模塊化結(jié)構,按照[CommonJS規(guī)范](http://wiki.commonjs.org/wiki/CommonJS)定義和使用模塊生蚁。
在`NodeJS`中,一般將代碼合理拆分到不同的`js`文件中,每一個文件就是一個模塊,而文件路徑就是模塊名.除了咱們自己寫,還可以使用別人寫好的模塊擅笔,那么就得使用一個神器,叫npm(**Node Package Manager**),一般安裝node的時候就安裝上了npm阅懦,我們進入終端輸入:
> npm -v
5.4.2

NPM 資料

咱們順帶說說npm,因為nodejs中命令行用的比較多,很多時候就是使用這個npm淹魄,說起來呢npm本身也不是很復雜羽戒,但是功能很強大易稠,本質(zhì)上只做一件事,管理模塊亡电,無論是下載還是升級,卸載冒嫡,都可以用npm,甚至還能用npm升級npm
1. 因為服務器的原因月腋,可能速度會很慢,所以換一個源(taobao源)
npm config set registry https://registry.npm.taobao.org
// 配置后可通過下面方式來驗證是否成功
npm config get registry
// 或npm info express
2. 安裝插件
    1. *本地安裝*:就是只能當前目錄使用 `npm install <Module  Name>`
        1. 將安裝包放在 `./node_modules` 下(運行 npm 命令時所在的目錄)妓肢,如果沒有` node_modules` 目錄,會在當前執(zhí)行 `npm` 命令的目錄下生成 `node_modules` 目錄喊废。
        2. 可以通過 `require()` 來引入本地安裝的包工闺。
    2. *全局安裝*:任何地方都能使用    `npm install <Modlue Name> -g`
        1. 將安裝包放在 `/usr/local` 下或者你 `node` 的安裝目錄。
        2. 可以直接在命令行里使用罗侯。

    tip:如果出現(xiàn)以下錯誤:`npm err!  Error: connect ECONNREFUSED 127.0.0.1:8087`
解決辦法為:`$ npm config set proxy null`

3. 常用命令
npm list / ls           查看所有本地安裝的模塊
npm ls  -g              查看所有全局安裝的模塊

npm uninstall <Module Name>   卸載模塊
npm update                    更新npm
npm update <Module Name>      更新模塊
npm init                初始化生成一個新的`package.json`文件
npm run xxx             執(zhí)行`package.json`里`scripts`字段,可以用于指定腳本命令

自定義模塊

下面是一個最簡單的模塊讲弄,假定新建一個foo.js文件,寫入以下內(nèi)容
// foo.js

module.exports = function(x) {
    console.log(x);
};
上面代碼就是一個模塊瓶摆,它通過module.exports變量,對外輸出一個方法书斜。

使用模塊

*node的核心模塊*
http:提供HTTP服務器功能。
url:解析URL样屠。
fs:與文件系統(tǒng)交互。
querystring:解析URL的查詢字符串。
child_process:新建子進程秘蛔。
util:提供一系列實用小工具负蠕。
path:處理文件路徑遮糖。
crypto:提供加密和解密功能,基本上是對OpenSSL的包裝芭概。
`require`命令用于指定加載模塊,*加載時可以省略腳本文件的后綴名*惹苗。
`require`方法的參數(shù)是模塊文件的名字淋纲。它分成兩種情況,第一種情況是參數(shù)中含有文件路徑(比如上例)片任,這時路徑是相對于當前腳本所在的目錄,第二種情況是參數(shù)中不含有文件路徑产场,這時Node到模塊的安裝目錄,去尋找已安裝的模塊
// index.js

var http = require('http')         //加載默認模塊http
var express = require('express');    //加載express模塊(得用npm install express)

var m = require('./foo');            //上文的自定義模塊

m.print("這是自定義模塊");

http協(xié)議

?

Node基礎

node全局

*node的全局對象*
global:表示Node所在的全局環(huán)境醒串,類似于瀏覽器的window對象。需要注意的是,如果在瀏覽器中聲明一個全局變量错蝴,實際上是聲明了一個全局對象的屬性禽篱,比如var x = 1等同于設置window.x = 1,但是Node不是這樣悼吱,至少在模塊中不是這樣(REPL環(huán)境的行為與瀏覽器一致)。在模塊文件中遇西,聲明var x = 1粱檀,該變量不是global對象的屬性,global.x等于undefined睦优。這是因為模塊的全局變量都是該模塊私有的皱碘,其他模塊無法取到家凯。

process:該對象表示Node所處的當前進程,允許開發(fā)者與該進程互動褪贵。

console:指向Node內(nèi)置的console模塊,提供命令行環(huán)境中的標準輸入动雹、標準輸出功能。
*node的全局函數(shù)*
setTimeout():用于在指定毫秒之后茸塞,運行回調(diào)函數(shù)噪窘。實際的調(diào)用間隔效扫,還取決于系統(tǒng)因素浩习。間隔的毫秒數(shù)在1毫秒到2,147,483,647毫秒(約24.8天)之間。如果超過這個范圍弯院,會被自動改為1毫秒听绳。該方法返回一個計時器對象异赫。
clearTimeout():用于終止一個setTimeout方法新建的定時器。
setInterval():用于每隔一定毫秒調(diào)用回調(diào)函數(shù)。由于系統(tǒng)因素,可能無法保證每次調(diào)用之間正好間隔指定的毫秒數(shù)荠列,但只會多于這個間隔,而不會少于它川队。指定的毫秒數(shù)必須是1到2,147,483,647(大約24.8天)之間的整數(shù)艳汽,如果超過這個范圍,會被自動改為1毫秒瑟捣。該方法返回一個計時器對象捐祠。
clearInterval():終止一個用setInterval方法新建的定時器。
require():用于加載模塊贵白。
Buffer():用于操作二進制數(shù)據(jù)猬膨。
*node的全局變量*
__filename:指向當前運行的腳本文件名谒所。
__dirname:指向當前運行的腳本所在的目錄。

異常處理

因為nodejs是異步單線程铁材,所以如果中間出錯了,就可能會發(fā)生整個程序的錯誤固惯,所以,在nodejs中異常處理對于程序的穩(wěn)定運行極為重要(其實對任何程序都很重要)贴捡。
一般來說,Node有三種方法汛骂,傳播一個錯誤。
    1. 使用throw語句拋出一個錯誤對象蒿讥,即拋出異常。
    2. 將錯誤對象傳遞給回調(diào)函數(shù)侥钳,由回調(diào)函數(shù)負責發(fā)出錯誤苦酱。
    3. 通過EventEmitter接口疫萤,發(fā)出一個error事件。
最常用的捕獲異常的方式尾序,就是使用try…catch結(jié)構携丁。但是兰怠,這個結(jié)構無法捕獲異步運行的代碼拋出的異常肥橙,所以Node只在很少場合才用try/catch語句,比如使用`JSON.parse`解析JSON文本塔次。
*Node采用的方法,是將錯誤對象作為第一個參數(shù)巾表,傳入回調(diào)函數(shù)。*
回調(diào)函數(shù)的第一個參數(shù)就是一個錯誤對象鞠苟,這是為了處理異步操作拋出的錯誤吃既。

參考資料:
nodejs 入門
阮一峰node教程
nodejs 基礎教程
七天學會nodejs
Nodejs API 中文文檔
Node.js 包教不包會
使用 Express + MongoDB 搭建多人博客

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冀惭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戚丸,更是在濱河造成了極大的恐慌,老刑警劉巖谣殊,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势告,死亡現(xiàn)場離奇詭異咱台,居然都是意外死亡春贸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來司光,“玉大人,你說我怎么就攤上這事购撼。” “怎么了揩局?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阐滩。 經(jīng)常有香客問我掂榔,道長装获,這世上最難降的妖魔是什么穴豫? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任肋杖,我火速辦了婚禮浊竟,結(jié)果婚禮上津畸,老公的妹妹穿的比我還像新娘肉拓。我一直安慰自己卑惜,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迟几,像睡著了一般。 火紅的嫁衣襯著肌膚如雪类腮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音祟偷,去河邊找鬼打厘。 笑死,一個胖子當著我的面吹牛户盯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莽鸭,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼硫眨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巧号?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤越走,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年修陡,在試婚紗的時候發(fā)現(xiàn)自己被綠了癣朗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片正卧。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖判耕,靈堂內(nèi)的尸體忽然破棺而出草丧,到底是詐尸還是另有隱情烛亦,我是刑警寧澤岖赋,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疚脐。R本人自食惡果不足惜望薄,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望花嘶。 院中可真熱鬧笛园,春花似錦蚜印、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揭璃。三九已至扣墩,卻和暖如春滥比,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背村视。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人温艇。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓蝎土,卻偏偏與公主長得像暴构,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寻定,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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