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引用**php
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模塊提供了對文件系統中的文件/目錄進行增刪改查、讀寫的功能。html
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服務器) node
用http模塊編寫web服務器:var server=http.createServer();
1)接收客戶端的http請求消息
2)解析客戶端請求消息
3)讀取客戶端請求的文件。
4)向客戶端發送http響應消息,主體就是客戶端請求的文件
1.4如何搭建一個web服務器 講了上述內容,咱們接下來能夠講一下如何用nodejs搭建一個小型的web服務器啦!(細看下面代碼和註釋哦!)mysql
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服務器,還須要中間件更多的知識點,之後博文會更新,敬請期待。
本文爲原創,若有不足之處請指正。web
轉載於猿2048:➸《nodejs搭建web服務器初級》算法