好不容易找到個wordpress的神器,結果發現被墻了,半夜三更導博客,絕了。
天資也不高,誰苦誰知道啊
果然還是希望把這個網站放在這啊https://polarbear997260416.wordpress.com/
一.定義
Node.js是構建在chromeV8的Js運行環境
二.特點
- 單線程:Nodejs不為每個客戶連接創建一個新的線程,而僅僅使用一個線程,由用戶連接,就觸發一個線程單線程也能造成宏觀上的并發。一個線程的崩潰會導致所有線程崩潰
- 非阻塞I/O:執行了訪問數據庫之后,立即執行后面的代碼,把數據庫返回結果放在回調函數中,提高執行效率線程利用率永遠百分之百。
- 事件驅動:在node中,在一個時刻,只能執行一個事件的回調函數,但是在執行一個事件回調函數的中途,可以轉而處理其他事件,然后返回繼續執行原事件的回調函數,這種處理機制,稱為事件環機制。
單線程:如果某一個事情,進入了,到那時被I/O阻塞了,所以這個線程就阻塞了。
非阻塞I/O不會傻等語句結束,會執行后面的語句。
但是如果執行一個業務在,另一個業務的I/O回調完成,會出現問題。
事件機制,事件環,所有事件進入事件環,等待調度,比如飯店服務員。
其他特性:
- 沒有BOM和DOM
- 只有EcmaScript
- 服務端不操縱頁面
- Npm node.js package ecosystem
三.http基本操作
1.必要操作
var http=require("http") 前一個http隨便起名,后一個必須是http
2.創建服務器
var server=http.createServer(function(request,response){})
返回值是一個服務器實例
服務器的用途:
- 提供服務
- 發請求
- 接受請求
- 處理請求
- 給反饋(發送響應)
當客戶端請求過來,自動觸發request請求事件,執行第二個參數:回調函數
server.on("request",function(){})
3.寫操作
response.write("abc");
寫東西 修改后需要關閉服務器
response.end();
綁定端口號監聽才能啟動服務器
server.listen(端口號);
四.fs操作
var fs=require("fs")
讀取文件,瀏覽器讀取文件時為二進制的
fs.readFile(文件名,function(err,data){})
寫文件,無需擔心二進制文件,服務器可以重建為用戶能看懂的形式
fs.writerFile(文件名,內容,回調函數)
由于是異步操作 fs中有讀寫文件可能會在end之后執行完畢
五.數據請求
1.GET
GET 數據在URL里
通過response.url獲取傳遞的數據
2.POST
POST 數據在http中,不能通過URL直接獲取
post數據很大,需要分段接收
data有一段數據到達(很多次)
req.on(‘data’,function(data){});
end數據全部到達(一次)
req.on(‘end’,function(){});
3.GET 和POST的區別
- 本質上的區別是語義的區別,根據HTTP規范,GET的語義是請求獲取指定的資源。GET方法是安全、冪等、可緩存的。POST的語義是根據請求負荷(報文主體)對指定的資源做出處理,具體的處理方式視資源類型而不同。POST不安全,不冪等,(大部分實現)不可緩存。具體差別如下:get在后退刷新時是無害的,post會重新提交請求;
- get參數通過URL傳遞,post放在Request body中;
- get請求參數保留在瀏覽器歷史記錄中,post參數不會保留;
- get產生的URL地址可以被存為書簽,而post不可以;
- 對參數的數據類型,get只接受ASCII字符,而post沒有限制;
- get比post更不安全,因為發送的數據顯示在URL上,在發送密碼或其他敏感信息時絕不要使用get;
- get請求只能進行url編碼,而post支持多種編碼方式。
六.GET和POST相關
1.Querystring
querystring可以將"user=xxx&password=xxx"解析為json格式
.parse(str):對url查詢參數(字符串)進行解析,生成易于分析的json格式。
.stringif():跟.parse()相反,用于拼接查詢查詢。
2.url
url可以將"xxx?user=xxx&password=xxx"解析
var obj=url.parse(地址,true)
其中obj.pathname為?前的網址部分,比如http://localhost:8080/1.html,pathname即為/1.html。
obj.query為user=xxx&password=xxx的json格式