fs模塊
- 創建目錄
fs.mkdir(path, callback) / fs.mkdirSync(path)
path
:目錄的路徑
callback
:回調函數//引入fs模塊 const fs=require('fs'); //1.創建目錄 //make direcotry fs.mkdir( 'mydir',function(err){ //err可能產生的錯誤 if(err) throw err; console.log('目錄創建成功'); } );
- 讀取目錄
fs.readdir(path,callback)/fs.readdirSync(path)
//2.讀取目錄 fs.readdir('01_homework',function(err,result){ if(err) throw err; //result是讀取的結果 console.log(result); });
- 移除目錄
fs.rmdir(path,callback)/fs.rmdirSync(path)
//3.移除目錄 fs.rmdir('01_homework',function(err){ if(err) throw err; console.log('目錄移除成功'); });
- 覆蓋寫入文件
fs.writeFile(path,data,callback)/fs.writeFileSync(path,data)
path
:文件路徑
data
:文件要寫入的數據
如果文件不存在,會先創建文件然後寫入數據//4.創建文件/寫入文件 fs.writeFile('1.txt','然哥今天穿一件翠綠色的衣服',function(err){ if(err) throw err; console.log('數據寫入成功'); });
如果文件已經存在,會覆蓋其中的內容寫入數據 - 追加寫入文件
fs.appendFile(path,data,callback)/fs.appendFileSnyc(path,data)
如果文件不存在,會先創建文件然後寫入數據//5.創建文件/追加寫入 fs.appendFile('2.txt','然哥今天穿了一斤熒光綠的泳衣\n',function(err){ if(err) throw err; });
如果文件存在,會在文件的末尾追加寫入數據
練習:將一組數據(數組)使用同步方法追加寫入到文件data.txt中
- 讀取文件
fs.readFile(path,callback)/fs,readFileSync(path)
讀取的數據格式爲Buffer
,需要轉字符串//6.讀取文件 fs.readFile('data.txt',function(err,data){ if(err) throw err; //data讀取到的數據,格式爲Buffer,需要轉爲字符串 console.log( data.toString() ); });
- 刪除文件
fs.unlink(path,rallback)/fs.unlinkSync(path)
//7.刪除文件 fs.unlink('1.txt',function(err){ if(err) throw err; console.log('刪除成功'); });
練習:使用異步方法刪除1.txt,使用同步方法刪除2.txt
- 檢測文件(目錄)是否存在
fs.existsSync(path)
如果存在返回true,不存在返回false//8.檢測文件(目錄)是否存在 //console.log( fs.existsSync('mydir') ); //練習:如果目錄mydir2不存在則創建該目錄,如果文件data.txt存在則刪除該文件 if( !fs.existsSync('mydir2') ){ fs.mkdirSync('mydir2'); } if( fs.existsSync('data.txt') ){ fs.unlinkSync('data.txt'); }
練習:如果目錄mydir2不存,則創建該目錄,如果文件data.txt存在,則刪除該文件
- 流:數據流,只需要內存中很小空間,就可以讀取一個大文件
fs.createReadStream(path)
:創建可讀取的流對象
fs.createWriteStream(path)
:創建可寫入的流對象
pipe()
:管道,專門用於處理流const fs=require('fs'); //文件流 //創建可讀取的文件流對象 let readStream=fs.createReadStream('1.zip'); //獲取數據 //通過事件:一旦有數據流進來,自動獲取 //on('data') 監聽是否有數據流,data是固定寫法,就是事件名稱; //通過回調函數獲取數據 let i=0; readStream.on('data',function(chunk){ //chunk 就是所讀取的數據,分段的數據 //console.log(chunk); //每讀取一段加1 i++; }); //事件:監聽是否讀取結束 //end是事件名稱,固定寫入;如果結束會自動觸發該事件,執行後邊的回調函數 readStream.on('end',function(){ console.log('讀取結束',i); }); //使用流完成拷貝大文件 //創建可讀取的流 const readStream=fs.createReadStream('1.zip'); //創建可寫入的流,同時也會創建新的文件 const writeStream=fs.createWriteStream('2.rar'); //把讀取的流通過管道添加到寫入流 //pipe 管道 readStream.pipe(writeStream);
http協議
- 客戶端瀏覽器和web服務器之間的通信協議
- 通用頭信息(General)
Request URL
:請求的URL,代表請求的內容是哪些Request Method
:請求的方法,請求內容的方式,常用的get/postStatus Code
:響應的狀態碼
1**:正在響應,還沒有結束
2**:成功的響應
3**:響應的重定向,會跳轉到另一個URL,要結婚響應頭信息的Location完成跳轉
4**:客戶端錯誤,例404
5**:服務器端錯誤
- 響應頭信息(Response)
Location
:跳轉到另一個URL,結合狀態碼3**Content-Length
:響應的內容長度Accept-Ranges
:響應內容的單位,通常是bytesContent-Type
:響應的文件類型
- 請求頭信息(Request)
Accept-Encodeing
:瀏覽器接收的壓縮類型 gzip/deflate - 請求的主題
傳遞的數據,可有可無
http模塊
既可以創建一個獨立web服務器,也可以模擬瀏覽器向其他服務器發送請求
1.向其他服務器發請求
http.get(url,callback)
ul
:請求的URLcallback
:通過回調函數獲取響應
res
:響應的對象
res.statusCode
:響應的狀態碼res.on('data',function(chunk){ })
通過事件獲取傳遞的參數,chunk就是獲取的數據,格式爲Buffer
const http=require('http'); //請求其它服務器 //get 請求方法 //參數1:請求的URL //參數2:通過回調函數獲取服務器端的響應 http.get('http://www.weather.com.cn/data/sk/101030100.html',function(res){ //res響應的對象 //獲取響應狀態碼 console.log(res.statusCode); //獲取數據(流) //監聽是否有數據流,通過回調函數獲取數據 res.on('data',function(chunk){ //chunk傳遞的數據,分段的 console.log(chunk.toString()); }); });
- 創建web服務器
const http=require('http');
//創建web服務器
const app=http.createServer();
//設置端口
app.listen(8080);
//服務器端要做出響應
//事件:一旦有請求發生,自動觸發這個這個事件,執行回調函數
//通過回調函數做出響應
app.on('request',function(req,res){
//console.log('有客到!!!');
//req 請求的對象
//獲取請求的內容
console.log(req.url);
//res 響應的對象
//跳轉到另一個URL
//參數1:設置響應的狀態碼
//參數2:可以爲空,用來設置響應的頭信息
//res.writeHead(302,{
// Location:'http://www.baidu.com'
//});
res.write('this is your beer');//設置響應的內容
res.end(); //結束併發送響應
});
通過:http://127.0.0.1:8080/http://localhost:8080
訪問
練習:創建web服務器,根據請求作出響應
1. 請求url /login 響應 this is login
2. 請求url /study 跳轉到 http://www.baidu.com
3. 其他 響應轉檯碼,404 內容爲 not found
思路:就是if判斷req.url