T-Node.js基礎-day03-fs模塊、http協議和模塊

fs模塊

  1. 創建目錄
    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('目錄創建成功');
    } );
    
  2. 讀取目錄
    fs.readdir(path,callback)/fs.readdirSync(path)
    //2.讀取目錄
    fs.readdir('01_homework',function(err,result){
      if(err) throw err;
      //result是讀取的結果
      console.log(result);
    });
    
  3. 移除目錄
    fs.rmdir(path,callback)/fs.rmdirSync(path)
    //3.移除目錄
    fs.rmdir('01_homework',function(err){
      if(err) throw err;
      console.log('目錄移除成功');
    });
    
  4. 覆蓋寫入文件
    fs.writeFile(path,data,callback)/fs.writeFileSync(path,data)
    path:文件路徑
    data:文件要寫入的數據
    //4.創建文件/寫入文件
    fs.writeFile('1.txt','然哥今天穿一件翠綠色的衣服',function(err){
      if(err) throw err;
      console.log('數據寫入成功');
    });
    
    如果文件不存在,會先創建文件然後寫入數據
    如果文件已經存在,會覆蓋其中的內容寫入數據
  5. 追加寫入文件
    fs.appendFile(path,data,callback)/fs.appendFileSnyc(path,data)
    //5.創建文件/追加寫入
    fs.appendFile('2.txt','然哥今天穿了一斤熒光綠的泳衣\n',function(err){
      if(err) throw err;
    });
    
    如果文件不存在,會先創建文件然後寫入數據
    如果文件存在,會在文件的末尾追加寫入數據
    練習:將一組數據(數組)使用同步方法追加寫入到文件data.txt中
  6. 讀取文件
    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() );
    });
    
  7. 刪除文件
    fs.unlink(path,rallback)/fs.unlinkSync(path)
    //7.刪除文件
    fs.unlink('1.txt',function(err){
      if(err) throw err;
      console.log('刪除成功');
    });
    

    練習:使用異步方法刪除1.txt,使用同步方法刪除2.txt
  8. 檢測文件(目錄)是否存在
    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存在,則刪除該文件
  9. 流:數據流,只需要內存中很小空間,就可以讀取一個大文件
    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服務器之間的通信協議
  1. 通用頭信息(General)
    1. Request URL:請求的URL,代表請求的內容是哪些
    2. Request Method:請求的方法,請求內容的方式,常用的get/post
    3. Status Code:響應的狀態碼
      1**:正在響應,還沒有結束
      2**:成功的響應
      3**:響應的重定向,會跳轉到另一個URL,要結婚響應頭信息的Location完成跳轉
      4**:客戶端錯誤,例404
      5**:服務器端錯誤
  2. 響應頭信息(Response)
    1. Location:跳轉到另一個URL,結合狀態碼3**
    2. Content-Length:響應的內容長度
    3. Accept-Ranges:響應內容的單位,通常是bytes
    4. Content-Type:響應的文件類型
  3. 請求頭信息(Request)
    Accept-Encodeing:瀏覽器接收的壓縮類型 gzip/deflate
  4. 請求的主題
    傳遞的數據,可有可無

http模塊

既可以創建一個獨立web服務器,也可以模擬瀏覽器向其他服務器發送請求
1.向其他服務器發請求

  • http.get(url,callback)
  • ul:請求的URL
  • callback:通過回調函數獲取響應
    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());
      });
    });
    
  1. 創建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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章