這幾天在學習node,以下的筆記主要是自己看《Node.js開發指南》的筆記,下面的內容主要是1到4章的
單線程、異步式I/O、事件驅動式的程序設計模型
Node.Js是可以讓JavaScript運行在服務器端的開發平臺
Node.js內建了一個HTTP服務器支持,也就是你可以輕而易舉地實現一個網站和服務器的組合
Node.js還可以部署到非網絡應用的環境下,比如一個命令行工具
Node.js可以調用C/C++的代碼Node.js在執行的過程中會維護一個事件隊列,程序在執行時進入事件循環等待下一個事件到來,每個異步式I/O請求完成后會被推送到事件隊列中,等待程序進程進行處理
內存上下文切換??
回調函數很重要
Node.js的異步機制是基于事件的,所有的I/O、網絡通信、數據庫查詢都以非阻塞的方式請求,返回的結果由事件循環處理
第三章 Node.js的快速入門
node script.js 其中script.js 就是腳本的文件名
node -e "console.log('Hello')"
Node的REPL模式,REPL
(Read-eval-print loop)
,即輸入—求值—輸出循環兩次Ctrl+c退出該模式
使用supervisor可以實現“熱加載
supervisor 文件名
當線程遇到I/O操作時候,不會以阻塞的方式等待I/O操作的完成或者數據的返回,而是將I/O請求發送給操作系統,繼續執行下一條語句。當操作系統完成I/O操作時候,以事件的形式通知I/O操作的線程,線程會在待定的時間處理這個事件
單線程、非阻塞
I/O部分和計算部分。通常I/O部分占用的時間比計算的部分多得多
- 異步式I/O比傳統的多線程阻塞式I/O少了多線程的開銷
EventEmitter
require不會重復加載模塊
覆蓋exports
exports
使用module.exports = Hello
代替exports.Hello = Hello
CommonJs規范應該具備以下特征:
npm是node官方提供的包管理工具
獲取一個包
npm [install/i] [package_name]
本地模式和全局模式
npm [install/i] -g [package_name]
本地模式不會注冊PATH環境變量,僅僅是把包安裝到node_modules子目錄下,其中的bin目錄沒有包含在PATH環境變量中,不能在命令行中調用
使用全局模式安裝的包并不能直接在 JavaScript 文件中用require獲得,因為 require 不會搜索 /usr/local/lib/node_modules/。
npm link
不支持Windows通過使用
npm init
可以根據交互式問答產生一個符合標準的package.jsonnpm pubilsh
發布包 package.json中修改version字段,重新使用npm publish
重新發布node中的全局對象是global,所有的全局變量(除了global本身以外)都是global對象的屬性
process就是一個全局變量,即global對象的屬性。它用于描述當前node進程狀態的對象,提供一個與操作系統的簡單接口
process.nextTick(callback)
的功能是為事件循環設置一項任務,Node.js會在下一次事件循環響應時候調用callback常用工具util是node的核心模塊,提供常用函數的集合,用于彌補核心JavaScript的功能過于精簡的不足
util.inherit(constructor,superConstructor)
是一個實現對象間原型繼承的函數
util.inspect(object,[showHidden],[depth],[])
是將任意對象轉換成字符串的方法,通常用于調試或者錯誤輸出對于每個時間,EventEmitter支持若干個事件監聽器
Node標準庫提供了http模塊,其中封裝了高效的HTTP服務器和一個簡易的HTTP客戶端
http.Server是HTTP模塊中的HTTP服務器對象,用Node.js做的所有基于HTTP協議的系統,如網站、社交應用甚至代理服務器,都是基于http.Server實現的
http.Server的事件
對它的事件編寫響應函數即可實現http服務器的所有功能
request
connection
closehttp.createServer([requestListener])
功能是創建一個HTTP服務器并將requestListener作為request事件的監聽函數http.ServerRequest
是HTTP請求的信息
一般由http.Server的request事件發送的,作為第一個參數進行傳遞
以下3個事件用于控制請求體傳輸
data
end
close
-
http.ServerResponse
是返回給客戶端的信息,決定了用戶最后能夠看到的內容。也是有http.Server
的request事件發送的,作為第二個參數進行傳遞
- http模塊提供兩個函數http.request和http.get,功能是作為客戶端向http服務器發起請求
http.request(options,callback)
發起http請求。option是類似關聯數組的對象,表示請求的參數,callback是請求的回調函數
-
http.ClientRequest
是由http.request或者http.get返回的對象,表示一個已經產生而且正在進行的http請求