前言
什么是Node.js?
Node.js 是一個開源和跨平臺的 JavaScript 運行時環境
Node.js 在瀏覽器之外運行 V8 JavaScript 引擎,即 Google Chrome 的核心。
一、fs模塊基礎
1. 引入fs模塊
const fs = require('fs');
2. 同步與異步方法
fs模塊提供了同步和異步兩種操作方式:
- 異步方法:通常帶有回調函數,不會阻塞程序執行
- 同步方法:方法名以
Sync
結尾,會阻塞程序直到操作完成
推薦優先使用異步方法,特別是在服務器環境中,以避免阻塞事件循環。
3. 常用文件操作方法
讀取文件
// 異步讀取
fs.readFile('example.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});// 同步讀取
try {const data = fs.readFileSync('example.txt', 'utf8');console.log(data);
} catch (err) {console.error(err);
}
寫入文件
// 異步寫入
fs.writeFile('example.txt', 'Hello Node.js', (err) => {if (err) throw err;console.log('文件已保存');
});// 同步寫入
try {fs.writeFileSync('example.txt', 'Hello Node.js');console.log('文件已保存');
} catch (err) {console.error(err);
}
追加內容
fs.appendFile('example.txt', '\n追加的內容', (err) => {if (err) throw err;console.log('內容已追加');
});
檢查文件/目錄是否存在
fs.access('example.txt', fs.constants.F_OK, (err) => {console.log(err ? '文件不存在' : '文件存在');
});
文件狀態
fs.stat('example.txt', (err, stats) => {if (err) throw err;console.log(`文件大小: ${stats.size}字節`);console.log(`是文件嗎? ${stats.isFile()}`);console.log(`是目錄嗎? ${stats.isDirectory()}`);
});
二、path模塊詳解
1. 引入path模塊
const path = require('path');
2. 常用路徑操作方法
路徑拼接
const fullPath = path.join(__dirname, 'public', 'images', 'avatar.jpg');
console.log(fullPath); // 輸出類似: /home/user/project/public/images/avatar.jpg
獲取路徑的各個部分
const filePath = '/home/user/project/src/app.js';console.log(path.dirname(filePath)); // /home/user/project/src
console.log(path.basename(filePath)); // app.js
console.log(path.extname(filePath)); // .js
路徑解析
const parsedPath = path.parse('/home/user/project/src/app.js');
console.log(parsedPath);
/*
{root: '/',dir: '/home/user/project/src',base: 'app.js',ext: '.js',name: 'app'
}
*/
路徑規范化
console.log(path.normalize('/foo/bar//baz/asdf/quux/..'));
// 輸出: /foo/bar/baz/asdf
相對路徑計算
console.log(path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'));
// 輸出: ../../impl/bbb