Node.js三

Rayshaan發表於2020-12-21

2020.12.20 22:06

01.新建專案目錄

新建專案目錄==>專案目錄裡有css/js/images資料夾和index.html

//先引入fs模組
const fs=require('fs');

function demo(proname){
	return {
		//專案名字
		proName:proname,
		//專案目錄裡的資料夾和檔案
		prolist:[
			{
				name:'css',
				type:'dir'
			},
			{
				name:'images',
				type:'dir'
			},
			{
				name:'js',
				type:'dir'
			},
			{
				name:'index.html',
				type:'file'
			}
		]
	}
}

function createDemo(proName){
	//先建立專案目錄
    fs.mkdir(__dirname+"/"+proName,err=>{
        if(err) throw err;
        //迴圈遍歷
        for(let i in demo().prolist){
        	//如果是資料夾型別就建立資料夾
            if(demo().prolist[i].type=='dir'){
            	//路徑拼接
                fs.mkdir(__dirname+"/"+proName+"/"+demo().prolist[i].name,err=>{
					console.log(demo().prolist[i].name+'建立成功');
				});
                //如果是檔案型別就建立檔案
            }else if(demo().prolist[i].type=='file'){
            	//html格式
                let str=`<!doctype html>
                    <html lang="en">
                        <head>
                            <meta charset="utf-8">
                        </head>
                        <body>
                            <div>${proName}</div>
                        </body>
                    </html>`;
                //新建檔案
                fs.writeFile(__dirname+"/"+proName+"/"+demo().prolist[i].name,str,err=>{
					console.log(demo().prolist[i].name+'建立成功');
				});
            }
        }
    });
}
createDemo('taobao');//建立名為taobao專案

注意:因為是非同步操作,一定要等待最外層目錄建立成功再迴圈=>判斷=>建立
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

02.http

  • node不需要任何軟體,通過模組實現傳統動態網站開發
  • node沒有靜態資源讀取能力

建立一個簡單的伺服器

//引入http模組
const http=require('http');
//建立伺服器
const server=http.createServer((req,res)=>{
	//響應前臺的內容
    res.end("\n"+'hello node');
});
//監聽埠號
server.listen('8989','192.168.3.100');

在這裡插入圖片描述

pc端:
在這裡插入圖片描述
移動端:
在這裡插入圖片描述
語法:

  • 固定寫法:.createServer((req,res)=>{});
  • req request 前臺請求過來的內容
  • res response 響應給前臺的內容
  • (如果響應內容有中文)為了防止中文亂碼,需要設定響應頭
    res.writeHead(200,{"Content-type":"text/plain;charset=utf-8"});
  • res.write('內容'); 向客戶端(前臺)響應內容,可以存在多個,必須寫在res.end()之前
  • res.end('內容');往前臺寫內容,結束本次響應(結束語句),不寫會無限請求導致頁面卡死
  • 一次請求必須要有res.end()且只能有一個res.end(),書寫多個只會執行一個(最上面的一個)
  • 書寫在res.end()後面的內容不再執行,並且會報錯
  • 監聽埠號 .listen('埠號','ip地址');

03.readfile(讀取檔案)

需求:讀取index.html檔案裡的內容

//引入http,fs,path模組
const http=require('http');
const fs=require('fs');
const path=require('path');
const server=http.createServer((req,res)=>{
	//如果請求是圖示請求就返回,不請求圖示
    if(req.url=='/favicon.ico'){return;}
    //如果請求是index.html就讀取檔案
    if(req.url=='/index.html'){
    	//自動拼寫路徑
        fs.readFile(path.join(__dirname,'index.html'),'utf-8',(err,data)=>{
            if(err) throw err;
            res.end(data);
        });
    }else{//如果請求不是index.html就返回404
        res.end('404 NOT FOUND');
    }
});
server.listen('8989');//監聽8989埠

請求index.html
在這裡插入圖片描述
請求aaa.html
在這裡插入圖片描述
請求abc.html
在這裡插入圖片描述
注意點:

  • node沒有讀取靜態資源能力,只能通過手動書寫程式碼實現
  • path模組的join方法path.join(路徑,路徑) 自動拼寫路徑
  • req.url是請求地址,每次請求會傳送兩個請求,一個是預設請求圖示(/favicon.ico),另一個是希望請求的地址
  • 如果不通過邏輯判斷,請求的地址是後臺請求的地址(實際請求地址),而不是瀏覽器搜尋欄中的地址(瀏覽器載入地址)

相關文章