學習小筆記---nodejs

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('求安慰')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章