Node.js部分知識總結
Node.js
01.npm
(node package manager)包管理器(為了方便進行版本控制和合作開發)
使用npm開發專案流程
-
1、新建英文資料夾
-
2、在資料夾內部開啟命令列工具 執行 npm init -y進行初始化操作
初始化為了以後會生成package.json檔案(配置檔案),專案初始化完畢(如果本身已經存在package.json,不需要初始化)。 -
3、下載檔案(一般是安裝包) npm install 包名@版本號 如果不限制版本預設是最新的版本
下載檔案相當於去npm伺服器尋找資源(該平臺任何人都可以去託管包),有可能你下載的包官網存在但是該平臺不存在 -
4、如果實現寫好了依賴 直接執行npm install生成所有的包(依賴寫在package.json中的包)
-
5、解除安裝包 npm uninstall 包名(如果直接刪除包,package.json中的依賴還是存在。解除安裝包以後不存在)
-
6、下載包的時候,預設會寫依賴(系統不太穩定,偶爾會出現寫不進去的情況) 寫依賴的意思就是把下載資訊寫進package.json檔案裡面
-
一般需要強制寫依賴
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的字串轉化為物件
接收到的資料:
轉換後的資料: