1. 程式人生 > 其它 >Node.js部分知識總結

Node.js部分知識總結

技術標籤:node.jsnode.js

Node.js

01.npm

(node package manager)包管理器(為了方便進行版本控制和合作開發)
使用npm開發專案流程

  • 1、新建英文資料夾

  • 2、在資料夾內部開啟命令列工具 執行 npm init -y進行初始化操作
    初始化為了以後會生成package.json檔案(配置檔案),專案初始化完畢(如果本身已經存在package.json,不需要初始化)。

  • 3、下載檔案(一般是安裝包) npm install 包名@版本號 如果不限制版本預設是最新的版本

    node_modules儲存的是專案所需要的所有包檔案(該資料夾在傳送別人的時候可以直接刪除)
    下載檔案相當於去npm伺服器尋找資源(該平臺任何人都可以去託管包),有可能你下載的包官網存在但是該平臺不存在

  • 4、如果實現寫好了依賴 直接執行npm install生成所有的包(依賴寫在package.json中的包)

  • 5、解除安裝包 npm uninstall 包名(如果直接刪除包,package.json中的依賴還是存在。解除安裝包以後不存在)

  • 6、下載包的時候,預設會寫依賴(系統不太穩定,偶爾會出現寫不進去的情況) 寫依賴的意思就是把下載資訊寫進package.json檔案裡面

  • 一般需要強制寫依賴

    npm install 包名 --save(-S)上線以後也需要/ --save-dev(-D)開發和測試需要/-g全域性安裝

02.匯入匯出語法

  • 1.匯出多個變數
    var a="這是a檔案"; var b="這是b檔案";
    export{a,b}; a.js
    import{a,b} from './a.js'; main.js
  • 2.匯出的時候可以取別名(為解決變數命名衝突)
    var a="這是a檔案"; var b="這是b檔案";
    export{a as newa,b} a.js
    import{newa,b} from './a.js';main.js

    匯出時{變數名 as 新變數名}
    匯入時{新變數名}
  • 3.整體匯入/載入(需要匯入的變數太多時)
    語法:import * as 物件名稱 from ‘路徑’ 物件裡存放的就是從路徑下匯出的所有值
  • 4.無論匯出還是匯入,都不能放在表示式內部,需要直接匯出或匯入
  • 5.匯入的時候不能使用變數
  • 6.匿名匯出
    1)匿名匯出,匯入的時候省略{}
    2)取名自己定義,不需要保持一致
    3)匿名匯出,匯出的是類/函式/物件,不能匯出普通變數
    4)只能有一個匿名匯出

03.fs模組

  • fs是一個內建的模組,需要單獨引入
  • global是全域性物件,可以直接使用,不需要單獨引入
  • 模組引入的時候,一般使用const
  • fs是檔案系統,一般用來和檔案有關的操作

fs模組功能:

  • 1.寫/建立檔案
    fs.writeFile('檔名','資料',err=>{}) 如果該檔案已經存在則無法建立(需要刪除再建立)
  • 2.刪除檔案
    fs.unlink('檔名字',(err)=>{})
  • 3.讀檔案
    fs.readFile('檔案路徑','utf-8',(err,data)=>{})
    data預設接收到的資料是buffer(16進位制)。如果需要轉化。
    1)data.toString()
    2)增加引數'utf-8' fs.readFile('my.txt','utf-8',(err,data)=>{})
  • 4.新建目錄(資料夾)
    fs.mkdir('目錄/資料夾名字',(err)=>{})如果該目錄存在,去建立會報錯
  • 5.刪除目錄(資料夾)
    fs.rmdir('目錄/資料夾名字',(err)=>{})
  • 6.讀取資料夾
    fs.readdir('資料夾路徑',(err,files)=>{}) files儲存的是當前資料夾下的所有檔案
  • 7.獲取當前路徑的狀態(stat)
    fs.stat('路徑',(err,stats)=>{})
    1)isFile()判斷是否是檔案
    2)isDirectory()判斷是否是目錄

04.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');

語法:

  • 固定寫法:.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地址');

05.readfile(讀取檔案)

//引入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埠

06.node_modules

封裝自己的模組需要手動建立node_modules目錄

  • require()匯入檔案 當前目錄 ./

  • require(模組) 首先判斷是否有模組

  • 內建的模組一般是定義好的

  • 如果是自己寫的或者下載。首先會去node_modules內部尋找該模組,如果找到可以載入。

  • 一般預設index.js是主入口檔案,如果別的檔案作為主入口,一定要配置package.json

  • 如果index.js和package.json同時存在,以package.json配置為準
    package.json{"main":"主入口檔案"}
    index.js:exports.m='hello';
    a.js:exports.n="hello node;"
    package.json{"main":"a.js"}
    在這裡插入圖片描述

  • 如果沒有package.json和index.js。會報錯。Cannot find module “xxx”。

  • 匯出的時候 exports.變數=值

  • 匿名匯出。如果使用的是module.exports匯入的時候可以直接使用變數
    module.exports.y='直接使用';
    const x=require('formdate');
    console.log(x);
    在這裡插入圖片描述

07.get請求和post請求

form表單

  • action請求地址,method請求方式
  • form預設是get方法
  • 如果是form直接提交資料,前端一定要有name值,才可以傳送資料給後臺

url模組

  • get請求的引數,在url內部,所以需要解析url 需要url模組
  • url模組專門用來處理地址
  • url.parse(地址,true)可以把地址解析為物件

post

  • post請求傳送資料的時候,是一段段傳送
  • 通過監聽data事件,接收資料
  • 通過監聽end事件 執行接收資料完畢後的操作
  • 定義一個變數接收資料
    接收的資料是k=v&k=v形式的資料,使用querystring(模組)轉化
    querystring.parse()可以把類似k=v&k=v的字串轉化為物件
    接收到的資料:
    在這裡插入圖片描述
    轉換後的資料:
    在這裡插入圖片描述