Node.js的知識點框架整理

背景:由於appium是基於Node.js的,因此想看一下Node.js。可是發現不少資料的順序看起來有點顛倒。而後就一面看資料一面整理了一下大概的知識點框架,但願對本身對別人有用。
本文不包含node.js的基本語法。node.js的基本語法和JavaScript基本同樣,能夠之後再單獨整理一份基本語法的。
 
Node.js是一個基於chrome V8的JavaScript運行時的環境
Node.js是事件驅動,非阻塞式I/O模型
Node.js使用npm包管理器
使用Node.js不只實現了一個應用,也實現了整個HTTP服務器,因此不須要單獨搭建Apache或nginx
 
 
Node.js安裝
mac下安裝方法
brew install node
 
查看node.js的版本
node -v
 
查看包管理工具npm版本
npm -v
 
進入node.js的交互式解釋器
node
交互式解釋器和python的相似。能夠輸入命令實時查看輸入結果
 
npm的使用
npm隨着node一塊兒被安裝
npm容許用戶從NPM服務器下載並安裝第三方包,也容許將本身編寫的包上傳到第三方服務器,相似python的pip
 
npm安裝命令
npm install 【包名】
安裝的包放在工程目錄的node_modeles目錄下,例如mac上是在/usr/local/lib/node_modules文件夾下
安裝好的包在代碼中經過require("包名")來引用
 
安裝的包模塊的目錄下有package.json,文件包含了包名、依賴包列表(npm安裝時會將依賴表中的包自動安裝)
 

Package.json 屬性說明

  • name - 包名。html

  • version - 包的版本號。node

  • description - 包的描述。python

  • homepage - 包的官網 url 。nginx

  • author - 包的做者姓名。git

  • contributors - 包的其餘貢獻者姓名。web

  • dependencies - 依賴包列表。若是依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。chrome

  • repository - 包代碼存放的地方的類型,能夠是 git 或 svn,git 可在 Github 上。express

  • main - main 字段是一個模塊ID,它是一個指向你程序的主要項目。就是說,若是你包的名字叫 express,而後用戶安裝它,而後require("express")。npm

  • keywords - 關鍵字
(屬性轉自菜鳥教程)
 
npm卸載命令
npm uninstall 【包名】
 
更新模塊
npm update 【包名】
 
搜索模塊
npm search【包名】
(從包管理中心搜索包含該關鍵詞的包)
 
更改npm下載的地址爲國內的倉庫
有些包下載較慢,能夠切換到國內的倉庫
npm config list(查看npm的一些配置項)
npm config set registry cnpmjs.org(更改倉庫爲cnpmjs.org)
 
首次更改倉庫後,會建立一個~/.npmrc文件,裏面內容爲「registry="https://registry.npm.taobao.org "」
若是想切回到原來的下載中心,能夠將~/.npmrc中的registry註釋掉或刪掉。
 
Node.js引入其餘模塊
經過require()引入其餘模塊
引入npm下載的第三方模塊
require("模塊名")
 
引入本地某一路徑下的模塊(實際就是.js文件,引用時不須要後綴)
require("路徑/模塊名")
例如引入當前目錄的hello.js模塊:require("./hello")
 
Node.js的函數
Node.js中一個函數能夠做爲另外一個函數接收參數,經過關鍵字function定義函數
定義方式:function 函數名(參數){要執行的內容}
 
function say(word){console.log(word)} \\定義一個名字爲say的函數,參數爲word
say("hi") \\調用函數say,並傳遞參數word爲hi
 
在函數作爲參數傳遞時,也能夠定義一個匿名函數(不取函數名,直接function(參數){要執行的內容})直接傳遞給函數
function exe(name,value){name(value)} \\定義一個函數exe
exe(function(value){console.log(value)},"wow,see it!")  \\執行exe()時,傳遞的第一個參數是一個匿名函數
 
Node.js的事件
Node.js是單進程單線程應用程序,經過事件和回調來支持併發(Node.js全部的API都經過回調實現了異步)
Node.js中全部事件都是用觀察者模式實現的
Node.js中大部分的模塊都繼承自Event模塊(Event模塊是一個簡單的事件監聽器模式的實現)
 
Node.js能夠經過引入events模塊,並經過實例化EventEmitter類來綁定和監聽事件。
綁定事件及事件的處理函數:eventEmitter.on("事件名字",函數)   \\實際就是綁定給時間eventEmitter一個監聽器
觸發事件:eventEmitter.emit(「事件名字」)
 
例子以下:
var events=require("events")//導入events模塊
var eventemitter=new events.EventEmitter()//實例化events的EventEmitter類
eventemitter.on("start",function(){console.log("hello world")})//註冊一個事件,綁定打印hello world的事件,名字爲start,實際start就是一個監聽器
eventemitter.emit("start")//觸發事件start
 
實際上on調用的是addListener(event,listener)。一個事件能夠on多個監聽器,emit執行時依次執行。
能夠經過removerListener來移除一個監聽器,監聽器還有不少其餘的方法。
類方法
 
Node.js的回調函數
Node的全部API都支持回調函數(也能夠選擇不使用回調函數),Node.js的異步是經過回調來實現的,非阻塞的I/O,大大提升了Node.js的性能
阻塞是按順序執行的,必須執行完當前的代碼纔會進行下一個執行。而非阻塞是不須要按照順序的,因此若是須要處理回調函數的參數,就須要寫在回調函數內。
 
例如fs的讀取函數readFile:
var fs=require("fs")
fs.readFile("test.txt",function(err,data){
     if (err) return console.log(err)
     console.log(data.toString())
})
 
Node的API回調函數的第一個參數都是捕獲錯誤,第二個參數通常是正確的返回值
 
Node.js全局對象
全局對象:它及它的全部屬性能夠在程序的任何地方訪問,不須要require導入
process:與當前進程互動,能夠查看當前目錄、進程等
console:用於輸出
setTimeout :定時,用法【setTimeout(函數,毫秒單位的時間)】
 
還有不少其餘的全局對象
 
 
Node.js的工具模塊
Node.js模塊庫有不少很好用的模塊,下面列舉幾個
os:返回當前系統的一些數據
path:對路徑作的一些操做
http:能夠建立web服務器對象等
fs:針對文件進行讀寫等操做
相關文章
相關標籤/搜索