commonjs規範
uri和url的區別
nodejs適用於高併發,i/o密集操作
安裝部分
http://nodejs.cn/是nodejs的中文網可以搜索相關的命令
安裝的時候可以去官網 https://nodejs.org/ 網站會根據電腦自動匹配相應的版本 點擊INSTALL 下載
安裝結束後 在 GIT BASH (或者cmd窗口裏) 裏輸入 node -v 查看node版本號 輸入 npm -v 查看npm版本號 如果系統給予相應的版本號說明安裝成功
若沒有 在 計算機-->屬性-->高級系統設置-->環境變量-->PATH 中添加 node.js的安裝目錄 重複之前的命令部分
安裝好以後在 項目目錄下建立一個server.js的文件
文件內容 (可以在nodejs.org/)的左下角複製 具體代碼如下
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello EverBody I Love You !!\n'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
代碼原理
加載了一個由javascript來編寫的 http模塊 他的職責是負責創建web服務器及處理http相關的任務
當1337端口發送過來請求的時候 返回一個Hello EverBody I Love You !! 並且在請求頭 返回一個狀態碼200 代表成功
通過createServer來創建一個web服務器 通過listen來監聽 1337端口的請求 當監聽到1337端口過來的請求以後
nodejs就會調用 回調函數 並傳入倆個參數 分別是請求體req 和 響應體res
res 是獲取請求的相應信息 比如說從什麼地方傳過來的 什麼方式傳過來的
server.js內文件編輯好以後 在GIT(BASH) 中輸入 node server.js 返回 Server running at http://127.0.0.1:1337/ 則配置服務器成功
重啓nodejs服務器 需要ctrl+c 然後再輸入 node server.js 服務器啓動成功 否則會出現連接錯誤 102
命令部分
node -v 查看node版本號
npm -v 查看npm版本號
node server.js 啓動服務器
ctrl+c *2 關閉服務器
node 進入node編輯區
process 調取全局變量
require 引用某個模塊
module.expors 是真實存在的東西
expors 是module.expors的輔助方法
全局對象(global)
console.log('輸出') 輸出
console.log(__dirname) 輸出文件的存儲的絕對目錄
console.log(__filename) 輸出的是包含文件名的絕對路徑
node中的全局對象
console.log() 輸出一條日誌
console.info() 輸出一條信息
console.error() 輸出錯誤
console.warn() 輸出警告
console.time() 統計一段代碼的執行時間
console.timeEnd() 傳的參數必須與time的一致
console.timeon()
node test.js >test1.txt 將test.js中的普通信息重定向到test1.txt中
node test.js 1>test1.txt 2>test2.txt 將test.js中的普通信息重定向到test1.txt中錯誤信息重定向到test2.txt中
node test.js 1>test1.txt 2>&1 將普通信息、錯誤信息都重定向到test1.txt中
process
process.stdout() 標準的信息輸出
process.stderr() 標準的錯誤輸出
url部分
url 模塊包含用於 URL 解析的實用函數,通過 require('url') 調用。
url.parse
url.parse(urlStr[, parseQueryString][, slashesDenoteHost])
urlStr - {string}
parseQueryString - {boolean},默認爲 false,若設爲 true 則會調用 querystring 模塊解析查詢字符串,併爲 query 屬性賦值一個對象
slashesDenoteHost - {boolean}, 默認爲 false,若設爲 true 則會把 //foo/bar 解析爲 { host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }
返回 {Object}
解析一個 URL 字符串。
url.parse('http://imooc.com/video/6710'){ // parse 後面跟着是字符串形式的URL
protocol: 'http:', // 網站底層的協議是 http 還是 https 還是 ftp
slashes: true, // 網站底層是否有協議的雙斜線 "//" 有 true 沒有false
auth: null,
host: 'imooc.com', // 記錄網站的服務器IP地址 或者域名
port: null, // 端口 默認的是80端口
hostname: 'imooc.com', // 主機名
hash: null, // 哈希值 錨點
search: null, // 查詢條件
query: null, // 發送給服務器的值 以等號分開的鍵值 稱之爲參數串
pathname: '/video/6710', // 訪問資源的路徑名
path: '/video/6710', // 路徑
href: 'http://imooc.com/video/6710' } // 完整的URL地址
url.parse('http://imooc.com/video/6710',true) //會將query中的值解析出來
url.parse('http://imooc.com/video/6710',true,true) //會將host中的值解析出來
url.format
url.format(urlObj) //將一個對象轉換成標準的URL地址
urlObj - {Object}
返回 {string}
格式化一個 URL 對象。
url.resolve
url.resolve(from, to) //將一個域名和一個資源路勁融合成一個url地址
from - {string}
to - {string}
返回 {string}
像瀏覽器一樣融合一個基礎 URL 和一個超鏈接 URL。
例子:
url.resolve('/one/two/three', 'four') // '/one/two/four'
url.resolve('http://example.com/', '/one') // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'
序列化
querystring.stringify(obj[, sep][, eq][, options])
將一個對象序列化爲一個查詢字符串。可以選擇是否覆蓋默認的分割符('&')和分配符('=')。
options 對象可以包含 encodeURIComponent 屬性(默認值爲 querystring.escape),可以用來以非 utf8 的其他編碼方式來編碼字符串。
querystring.stringify({name='scott',course:['jade','node'],from:''}) //將傳入的參數解析成
'name=scott&course=jade&course=node&from='
querystring.stringify({name='scott',course:['jade','node'],from:''},',') //將傳入的參數解析成 第二個參數 是將解析的字符串以什麼形式分開
'name=scott,course=jade,course=node,from='
querystring.stringify({name='scott',course:['jade','node'],from:''},',','=>') //將傳入的參數解析成 第三個參數 是將【鍵】=【值】 中間的等號替換成 第三個參數
'name=scott,course=>jade,course=>node,from=>'
反序列化
querystring.parse('name=scott&course=jade&course=node&from=') //將之前解析的東西反序列化
轉義和反轉義
querystring.escape('<哈哈>') 會將<哈哈> 轉義成%3C%E5%93%88%3E
querystring.unescape('%3C%E5%93%88%3E') 會將'%3C%E5%93%88%3E' 轉義成 <哈哈>
chrome://net-internals/#dns 查看谷歌瀏覽器下的dns
C:\Windows\System32\drivers\etc\hosts 查看本地host文件
HTTP 狀態碼
1XX 指示信息 表示請求信息已經接收了 繼續處理
2XX 請求已經成功 處理掉了
200 OK 請求成功
3XX 表示重定向 請求進行更進一步的操作
4XX 客戶端錯誤
400 客戶端語法錯誤 服務端無法理解
401 請求沒經過授權
403 服務端收到請求 但是拒絕服務沒有權限
404 沒找到 或者url地址錯誤
5XX 服務器端錯誤
500 服務器端發生不可預期的錯誤
503 當前不能處理客戶端的請求
EventEmmit
作用域和上下文
上下文:
call、apply更換對象
測試響應數據:
ab -n1000 -c10 http://www.imooc.com
EventEmitter
emit
removeListener('求安慰',water)
removeAllListener('求安慰')