1. 程式人生 > >nodejs搭建web伺服器初級

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伺服器,還需要中介軟體更多的知識點,以後博文會更新,敬請期待。

本文為原創,如有不足之處請指正。