Node.js模組化開發
1:JavaScript開發弊端
JavaScript在使用時存在兩大問題,檔案依賴和命名衝突
2: Node.js中模組化開發規範
-
Node.js規定一個JavaScript檔案就是一個模組,模組內部定義的變數和函式預設情兄下在外部無法得到
-
模組內部可以使用exports物件進行成員匯出,使用require方法匯入其他模組。
例:dom1.js 匯出檔案
let ve=1; //定義了一個變數
const sy = name => `你好, ${name}`;//定義一個方法
//向模組化外部匯出資料
exports.ve=ve;
exports. sy=sy;
gom.js 匯入檔案
//模組成員進行匯入
//在gom.js模組中匯入dom1模組
let gom=require('./dom1');
//輸出dom1模組ve變數
console.log(gom.v);
//輸出方法
console.log(gom.s('小明'));
執行gom.js
模組成員匯出的另一種方式(module)
例:a.js
const g =name => `hello ${name}`;
module.exports.gz=g;
b.js
const b=require('../模組化/a');
console.log(b.gz('小明'));
執行b.js
模組匯出兩種方式的聯絡與區別
exports是module.exports的別名(地址引用關係),匯出物件最終以module.exports為準.
- 當export和module.exports指向同個物件時,二者是等價的
例:a.js
const g =name => `hello ${name}`;
const x=100;
exports.x=x;
module.exports.gz=g;
b.js
const b=require('../模組化/a');
// console.log(b.gz('小明'));
console.log(b);
你可以發現 x:100照樣可以輸出
- 當export和module.exports指向不同個物件時,以module.exports為準
例:a.js
module.exports={
name:'張三'
}
exports={
age:20
}
b.js
const b=require('../模組化/a');
console.log(b);
你可以發現最終輸出的是module.exports的值
3:系統模組
什麼是系統模組
Node執行環境提供的APl.因為這些API都是以模組化的方式進行開發的,所以我們又稱Node執行環境提供的API為系統模組
系統模組fs檔案操作
f:file檔案,s:system系統,檔案作業系統。
(1)讀取檔案內容
fs.reaFile('檔案路徑/檔名稱'[,'檔案編碼’],ca1lback);
ca1lback是一個回撥函式
例 readfile.js
//系統模組
const fs=require('fs');
//通過readFile讀取檔案內容
fs.readFile('./a.js','utf8',(err,doc) =>{
console.log(err);
console.log(doc);
})
讀取過程是硬碟讀取 err是錯誤資訊,doc是檔案讀取的內容
執行你可以發現它將a.js的內容讀取下來了
(1)寫入檔案內容
fs.writeFile('檔案路徑/檔名稱‘,’資料’,callback);;
ca1lback是一個回撥函式
例:wirefile.js
const fs=require('fs');
fs.writeFile('./doex.txt','插入的資料',err =>{
if(err!=null){
console.log('有錯誤');
}
console.log('插入成功');
})
執行你可以發現插入成功了,doex.txt裡面也有插入的資料
系統模組path 路徑操作
為什麼要進行路徑拼接?
- 不同作業系統的路徑分隔符不統一
- /public/uploads/avatar
- Windows上是\ /
- Linux上是/
路徑拼接語法:path.join(路徑’,路徑,…)
//比如拼接//public/uploads/avater目錄
const path=require('path');
const pj=path.join('public','uploads','avater');
console.log(pj);
相對路徑VS絕對路徑
-
大多數情況下使用絕對路徑,因為相對路徑有時候相對的是命令列工具的當前工作目錄
-
在讀取檔案或者設定檔案路徑時都會選擇絕對路徑
-
使用dirname獲取當前檔案所在的絕對路徑