• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • nodejs學習筆記系列--模塊

    標簽: node  js

    nodejs學習筆記

    一、node特點:

    • 非阻塞I/O
    • 事件驅動
    • chrom V8引擎

    二、優點:

    • 由于非阻塞 I/O造就了高并發的特點,高并發特別好,適用于網絡請求比較大的場合。

    三、前端js和服務端js區別

    • 前端js

      • dom操作
      • 基本語法操作
      • bom操作
      • ajax
      • 不能修改文件
      • 基本語法
    • 服務端js

      • 能修改文件

      • 能操作數據庫

      • 不能操作dom

      • 基本語法

    四、如果由需求使用特定的node版本,那么可以安裝nvm來實現,語法

    nvm use 版本號
    

    五、不安裝cnpm,通過配置npm鏡像地址來提高速度,在cmd中執行如下命令:

    npm config set registry https://registry.npm.taobao.org
    

    六、node運行環境:

    ? 1、REPL運行環境,就是直接在cmd中node回車,然后1+1回車,這類操作

    ? 2、node + 文件夾名

    七、模塊化

    • 內置模塊
      • fs-文件系統
    • 第三方模塊
    • 自定義模塊
      • 創建一個模塊(一個js文件就是一個模塊)
      • 導出一個模塊(module.express=函數名)
      • 引入一個模塊并調用(require)

    八、內置模塊的學習:

    注意:node錯誤優先,在回調函數中第一個參數表示錯誤對象,默認為空,如果出現錯誤就為錯誤對象。所以在執行的時候先判斷錯誤

    fs.readdir('./',(err,data)=>{
    	if(err){
    		console.log(err);
    	}else{
    		cosnole.log(data);
    	}
    })
    

    1、fs文件操作模塊

    • 1、同步讀取文件夾readdirSync(‘路徑’,[配置對象operation]) 注[ ]內東西為可選參數。
    // 為了防止發生錯誤,程序停止執行,使用try{}catch(err){}來捕獲錯誤,并繼續執行。
    let fs = require('fs');
    try{
      let dirs=fs.readdirSync('./')
      console.log(dirs);
    }catch(err){
      console.log('出錯了');
      console.log(err);
    }
    
    • 2、異步讀取文件夾readdir(‘路徑’,[配置對象],回調函數);
    let fs = require('fs');
    fs.readdir('./', (err, res)=>{
      if(err){
        console.log(err);
      }else{
        console.log(res);
      }
    })
    console.log(222);
    

    總結:同步操作為了防止報錯后終止執行,要使用try{}catch(err){}來捕獲錯誤。異步執行錯誤回調優先,雖然遇到錯會優先執行同步任務,不影響程序執行。

    • 3、創建文件夾mkdir(‘文件夾名字’,callback(回調)) mkdirSync同步操作,用法和上邊類似。
    let fs = require('fs');
    fs.mkdir('./hellos', (err)=>{
      if(err){
        console.log('失敗');
      }else{
        console.log('創建成功');
      }
    })
    
    • 4、重命名文件夾rename(oldPath,newPath,callback)
    let fs = require('fs');
    fs.rename('./hellos', './rename', (err)=>{
      if(err){
        console.log('失敗');
      }else{
        console.log('重命名成功');
      }
    })
    
    • 5、刪除文件夾rmdir(‘文件夾名字’,callback)
    let fs = require('fs');
    fs.rmdir('./rename', (err)=>{
      if(err){
        console.log('失敗');
      }else{
        console.log('刪除成功');
      }
    })
    

    注意:只能刪除空空文件夾。

    • 6、創建文件writeFile(‘文件名’,‘內容’,callback),該方式又稱為覆蓋寫入

      let fs = require('fs');
      fs.writeFile('./hello.txt','今天是個好天氣', (err)=>{
        if(err){
          console.log('失敗');
        }else{
          console.log('寫入成功');
        }
      })
      

      創建文件夾appendFile(‘文件名’, ‘內容’,callback),和writeFile的區別在于不會覆蓋原來的信息。

    • 7、讀取文件readFile(‘文件名’,[配置項],callback),默認返回二進制數據流buffer,需要轉換一下

    let fs = require('fs');
    fs.readFile('./hello.txt', (err,res)=>{
      if(err){
        console.log('失敗');
      }else{
        console.log(res.toString('utf8'));
      }
    })
    // 或者在配置項中加入配置
    let fs = require('fs');
    fs.readFile('./hello.txt','utf8', (err,res)=>{
      if(err){
        console.log('失敗');
      }else{
        console.log(res);
      }
    })
    
    • 8、刪除文件unlink(‘文件名’,callback)

      let fs = require('fs');
      fs.unlink('./hello.txt', (err)=>{
        if(err){
          console.log('失敗');
        }else{
          console.log('刪除成功');
        }
      })
      

    注:文件操作都有同步操作和異步操作

    小練習獲取當前路徑下所有文件

    let fs = require('fs');
    function hello(data){
      fs.readdir(data, (err, res)=>{
        if(err){
          console.log('失敗');
        }else{
          for(let i=0;i<res.length;i++)
          {
            fs.stat(`${data+res[i]}`,(err,stats)=>{
              if(stats.isFile()){
                console.log(data.replace('./','')+ res[i]);
              }else{
                hello(`${data+res[i]}/`)
              }
            })
          }
        }
      })
    }
    hello('./');
    
    • 9、判斷是文件還是文件夾stat,stat是個類,里邊有isFile()方法判斷是不是文件
    let fs = require('fs');
    fs.stat('./hello.txt', (err, stats)=>{
      if(stats.isFile()){
        console.log('是文件');
      }else{
        console.log('是文件夾');
      }
    })
    

    2、url模塊-統一資源定位符

    在這里插入圖片描述

    • 1、將一個url字符串轉換成url對象,url.parse(‘url字符串’)
    let url=require('url');
    const urls="https://www.lingge.com:3000/main/demo?name='功夫'&age=19'#hash"
    const urlObj=url.parse(urls);
    console.log(urlObj);
    

    輸出結果為:
    在這里插入圖片描述

    • 2、將一個url對象轉換成url字符串,url.format(‘url對象’)
    let url=require('url');
    const urlObject={
      protocol: 'https:',
      slashes: true,
      auth: null,
      host: 'www.lingge.com:3000',
      port: '3000',
      hostname: 'www.lingge.com',
      hash: '#hash',
      search: '?name=%27功夫%27&age=19%27',
      query: 'name=%27功夫%27&age=19%27',
      pathname: '/main/demo',
      path: '/main/demo?name=%27功夫%27&age=19%27',
      href: 'https://www.lingge.com:3000/main/demo?name=%27功夫%27&age=19%27#hash'
    }
    const urlString=url.format(urlObject);
    console.log(urlString);
    
    
    • 3、將查詢條件字符串轉成query對象queryString.parse(‘查詢條件字符串’)

    當然還可以有另外兩個參數,當查詢條件不以&和=連接時候需要使用另外兩個參數

    let url=require('url');
    let qs=require('querystring');
    const urls="https://wwww.baidu.com:8000?name=admin&password=admin";
    const urlObject=url.parse(urls);
    const obj=qs.parse(urlObject.query);
    console.log(obj);
    // 輸出結果為:
    { name: 'admin', password: 'admin' }
    
    let url=require('url');
    let qs=require('querystring');
    const urls="https://wwww.baidu.com:8000?name-admin$password-admin";
    const urlObject=url.parse(urls);
    const obj=qs.parse(urlObject.query, '$', '-');
    console.log(obj);
    // 輸出結果和上邊一樣,因此第二個參數為鍵值對區分符號,第三個參數為鍵和值的連接符號,這兩個參數是可選參數。
    
    • 4、將查詢對象拆分成query字符串:queryString.stringify(‘對象’,[鍵值對連接符],[鍵和值連接符])
    let qs=require('querystring');
    const urlObject={ name: 'admin', password: 'admin' };
    const string=qs.stringify(urlObject);
    console.log(string);
    // 輸出結果:name=admin&password=admin
    
    • 5、將查詢條件query進行編碼操作:queryString.escape(query),query位置見上圖
    let qs=require('querystring');
    const query='name=你好&password=admin';
    const string=qs.escape(query);
    console.log(string);
    // 輸出結果: name%3D%E4%BD%A0%E5%A5%BD%26password%3Dadmin
    
    • 6、將查詢條件進行解碼操作:queryString.unescape(query)

      let qs=require('querystring');
      const escape='name%3D%E4%BD%A0%E5%A5%BD%26password%3Dadmin';
      const string=qs.unescape(escape);
      console.log(string);
      // 輸出結果: name=你好&password=admin
      

    問題:什么是json?什么是json字符串?什么是json對象?

    答:json是一種數據格式。json字符串就是保證了json格式的字符串,json對象就是保證json格式的對象。

    3、第三方插件

    • 1、實現郵件發送驗證的第三方插件: nodemailer,在npm官網搜索nodemailer插件,安裝到項目中使用。
    "use strict";
    const nodemailer = require("nodemailer");
    // 創建郵件發送對象
    let transporter = nodemailer.createTransport({
      host: "smtp.qq.com", //在nodemailer的lib下的well-know中查找對應的郵箱名稱
      port: 465, //在nodemailer的lib下的well-know中查找對應的郵箱端口
      secure: true, // 在nodemailer的lib下的well-know中查找對應的郵箱
      auth: {
        user: "[email protected]", // 發送方郵件地址
        pass: "puwhqbachg" // 以QQ郵箱為例,開啟pop3會發送給你一串字符
      }
    });
    
    // 發送郵件對象
    let obj={
      from: '"領哥" <[email protected]>', // 發送方郵箱地址
      to: "[email protected]", // 接收方郵箱地址
      subject: "密碼重置", // 郵件標題
      text: "您本次的驗證碼為4673,有效期5分鐘", //郵件內容
    }
    // 發送郵
    transporter.sendMail(obj, (err, data)=>{
      if(err){
        console.log('發送失敗');
        console.log(err);
      }else{
        console.log('發送成功');
      }
    });
    
    版權聲明:本文為zhangqling原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/zhangqling/article/details/104818516

    智能推薦

    nodejs學習筆記

    1.node js 概述 nodejs基于谷歌V8引擎,運行在服務端的語言,基于JS 1.1對比js和nodejs JS運行在客戶端瀏覽器,存在多個瀏覽器,容易產生兼容性問題;nodejs在服務器端,不存在兼容性 兩者都有內置(ES)對象、自定義對象、宿主對象(根據執行環境的不同劃分) JS用于網頁中的交互效果,nodejs用于服務器的操作,例如web服務器創建,數據庫操作,文件的操作等 1.2 ...

    NodeJs學習筆記2

    一、總結   Node.js開發服務器,數據、路由。本地關心的效果,交互;   Node.js實際上是極客開發出的一個小玩具,不是銀彈。有著別人不具備的怪異特點:   單線程、Non-blocking I/O、Event Driven; 實際上是一個特點。   首先,Node不為每個用戶開辟一個線程,所以非常極端的選擇了單線程。單線程,要照顧所有的用戶,那么...

    nodejs初步學習筆記

    一個服務器就這樣建好了,在瀏覽器輸入127.0.0.1:1337就可以看到helloworld了 函數中的兩個參數(req,res)req是請求體,res是響應體 nodejs基于Commonjs1.0規范,實現包管理系統,每一個文件是一個獨立的模塊,里面不需要命名空間,不用擔心變量污染 模塊分類: 1、核心模塊 2、文件模塊 3、第三方模塊 模塊流程: 1、創建模塊 2、導出模塊 3、加載模塊 ...

    NodeJs學習筆記1

    一、Node.js簡介 1.1 簡介   V8引擎本身就是用于Chrome瀏覽器的JS解釋部分,但是RyanDahl把V8搬到了服務器上,用于做服務器的軟件。   Node.js是一個讓JavaScript運行在服務器端的開發平臺,它讓JavaScript的觸角伸到了服務器端,可以與PHP、JSP、Python、Ruby平起平坐。   與Node不同:   ...

    NodeJs學習筆記(二)

    跟著廖雪峰學NodeJS WEB開發 Koa入門 每收到一個http請求,koa就會調用通過app.use()注冊的async函數,并傳入ctx和next參數。 我們可以對ctx操作,并設置返回內容。但是為什么要調用await next()? 原因是koa把很多async函數組成一個處理鏈,每個async函數都可以做一些自己的事情,然后用await next()來調用下一個async函數。我們把每...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡