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é)議
?![](%24res/TIM%E6%88%AA%E5%9B%BE20170904141355.png)
![](%24res/TIM%E6%88%AA%E5%9B%BE20170904141525.png)
![](%24res/TIM%E6%88%AA%E5%9B%BE20170904141718.png)
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 搭建多人博客