nodejs搭建web伺服器初級
1.1簡介
Node.js是基於Chrome JavaScript執行時建立的一個平臺,實際上它是對Google Chrome V8引擎進行了封裝,它主要用於建立快速的、可擴充套件的網路應用。
也就是說,瀏覽器的Javascript是瀏覽器js程式碼解析,而Node.js則是伺服器端JS的程式碼解析器,存於伺服器端的JS程式碼由Node.js來解析和應用。
注:雖然從某種意義上講Nodejs和js 是同一種產物,寫法用法不盡相同,但是重點來了,nodejs在作用域服務端,js只是作用域瀏覽器端,js可以指向瀏覽器,nodejs指向不了瀏覽器,所以有些api是不同的。
同理:js為弱型別語言,那麼nodejs也是弱型別語言在語言演算法上有事會有偏差,如果開發銀行系統,支付系統不要用nodejs。(nodejs 適合IO密集型應用,不適合於CPU密集型應用。)
1.2node模組型別
模組型別有:
1)官方提供的原生模組 global、util、querystring、url、buffer、fs、http、 2)第三方模組 mysql、oracle、express 3)自定義模組 檔案模組和目錄模組
1.3常用的原生模組 -- 難點重點
1)querystring模組用於處理http請求url中的查詢字串 var obj=qs.parse(str); 把查詢字串解析為js物件 var str=qs.parse(obj); 把js物件轉換為查詢字串
2)url 模組用於解析一個http請求地址,獲取其中各個不同的部分 var obj = url.parse(str) 把一個url字串解析為一個物件 var obj = url.parse(str,true) 把一個url字串解析為一個物件,並把其中的查詢字串也解析為物件
3)buffer 緩衝區,本質是一塊記憶體區域,用於暫存以後要用到的資料(可能是數字,字串,二進位制圖片、音視訊等), 該區域就成為“快取”。 ******全域性物件無需require引用******
1 //建立一個大小為10位元組的緩衝區2 var buf1 = Buffer.alloc(10); //alloc:分配 3 console.log(buf1); 4 var buf2 = Buffer.alloc(1024*3); //alloc:分配3kb大小的緩衝區 5 console.log(buf2); 6 var buf3=Buffer.from(['a','b','c']); 7 console.log(buf3); 8 //使用一個字串建立一個緩衝區 9 var buf4=Buffer.from('abcd'); 10 console.log(buf4); 11 var buf5=Buffer.from('一二三文'); 12 console.log(buf5); 13 14 //把緩衝區的內容轉換為字串 15 console.log(buf5.toString());
4)fs 檔案系統模組 fs模組提供了對檔案系統中的檔案/目錄進行增刪改查、讀寫的功能。
1 //同步讀取檔案中的內容 2 var data=fs.readFileSync(file); 3 //同步向檔案中寫出內容(刪除已有內容) 4 fs.writeFileSync(file,str/buf); 5 //同步向檔案中追加寫出內容(不刪除已有內容) 6 fs.appendFileSync(file,str.buf) 7 8 例如fs非同步讀寫檔案 不需要等待直接往下走 9 //非同步讀取檔案中的內容 10 fs.readFile(file,funcgtion(err,data){ 11 12 }); 13 //異步向檔案中寫出內容(刪除已有內容) 14 fs.writeFile(file,str/buf,function(){ 15 16 }); 17 //異步向檔案中追加寫出內容(不刪除已有內容) 18 fs.appendFile(file,str.buf,function(){ 19 20 });
5)http 模組可用於編寫基於http協議的客戶端程式(即瀏覽器); 也可以編寫基於http協議的伺服器端程式(即web伺服器) 用http模組編寫web伺服器:var server=http.createServer(); 1)接收客戶端的http請求訊息 2)解析客戶端請求訊息 3)讀取客戶端請求的檔案。 4)向客戶端傳送http響應訊息,主體就是客戶端請求的檔案
1.4如何搭建一個web伺服器
講了上述內容,我們接下來可以講一下如何用nodejs搭建一個小型的web伺服器啦!
1 const http=require('http'); 2 const url=require('url'); 3 const fs=require('fs'); 4 //建立一個http伺服器 5 var server=http.createServer(); 6 //讓http伺服器監聽指定的埠 7 server.listen(80); 8 //當客戶端請求到來時,處理請求訊息 9 server.on('request',function(req,res){ 10 //處理訊息 req請求訊息,res響應訊息 11 console.log('nodejs伺服器接收到一個請求'); 12 //解析客戶端發來的請求訊息 13 console.log('請求地址'+req.url); 14 var objURL=url.parse(req.url); 15 /*console.log(objURL);*/ 16 res.setHeader('Content-Type','text/html;charset=utf-8'); 17 var path = objURL.pathname; 18 if(path==='/login'){ 19 20 /*res.write('<h1>歡迎訪問登入頁面</h1>');*/ 21 fs.readFile('./public/login.html',(err,data)=>{ 22 if(err){ 23 res.write('<h1>報錯了</h1>'); 24 }else{ 25 res.statusCode=200; 26 res.write(data); 27 res.end(); 28 } 29 }); 30 31 }else if(path==='/index'){ 32 33 fs.readFile('./public/index.html',(err,data)=>{ 34 if(err)throw err;//若存在錯誤丟擲錯誤,後面不執行 35 res.statusCode=200; 36 res.write(data); 37 res.end(); 38 39 }); 40 }else{ 41 42 fs.readFile('./public/404.html',(err,data)=>{ 43 if(err){ 44 res.write('<h1>報錯了</h1>'); 45 }else{ 46 res.statusCode=404; 47 res.write(data); 48 res.end(); 49 } 50 }); 51 } 52 });
本文適用初級者,如想搭建健全的web伺服器,還需要中介軟體更多的知識點,以後博文會更新,敬請期待。
本文為原創,如有不足之處請指正。