nodejs 常用的核心模塊
Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境,
它允許 JavaScript 運行在服務器端。Node.js 擁有豐富的標準庫,也就是核心模塊,
這些模塊提供了各種功能,
使得開發服務器端應用程序變得簡單高效。以下是一些 Node.js 中常用的核心模塊
1:http 和 https:
用于創建 HTTP 和 HTTPS 服務器
const http = require(‘http’);
http.createServer((req, res) => {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(1337, ‘127.0.0.1’);
console.log(‘Server running at http://127.0.0.1:1337/’);
2:fs(文件系統):
用于讀寫文件系統中的文件。
示例代碼:
const fs = require(‘fs’);
fs.readFile(‘input.txt’, ‘utf8’, (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
3:path:
用于處理文件和目錄的路徑。
示例代碼:
const path = require(‘path’);
常用方法
-
path.join([…paths]) - 連接路徑
const fullPath = path.join(‘/user’, ‘documents’, ‘file.txt’);
console.log(fullPath);
// 在 Unix 上輸出: /user/documents/file.txt
// 在 Windows 上輸出: \user\documents\file.txt -
path.resolve([…paths]) - 解析絕對路徑
const absolutePath = path.resolve(‘src’, ‘app.js’);
console.log(absolutePath);
// 輸出當前工作目錄下的絕對路徑,如: /home/user/project/src/app.js -
path.basename(path[, ext]) - 獲取文件名
console.log(path.basename(‘/user/docs/file.txt’)); // file.txt
console.log(path.basename(‘/user/docs/file.txt’, ‘.txt’)); // file -
path.dirname(path) - 獲取目錄名
console.log(path.dirname(‘/user/docs/file.txt’)); // /user/docs -
path.extname(path) - 獲取擴展名
console.log(path.extname(‘index.html’)); // .html
console.log(path.extname(‘file’)); // 空字符串
path.sep - 平臺特定的路徑分隔符 console.log(path.sep); // Windows 輸出 ‘’, Unix 輸出 ‘/’
path.delimiter - 平臺特定的路徑分隔符(用于 PATH 環境變量) console.log(path.delimiter); // Windows 輸出 ‘;’, Unix 輸出 ‘:’
路徑規范化
使用 path.normalize(path) 可以規范化路徑,處理多余的 .、… 和分隔符:
console.log(path.normalize(‘/user//docs/…/file.txt’)); // /user/file.txt
路徑解析與格式轉換
path.parse(path) - 解析路徑為對象
const pathObj = path.parse(‘/user/docs/file.txt’);
console.log(pathObj);
/*
{
root: ‘/’,
dir: ‘/user/docs’,
base: ‘file.txt’,
ext: ‘.txt’,
name: ‘file’
}
*/
path.format(pathObject) - 從對象構建路徑
const pathStr = path.format({
dir: ‘/user/docs’,
name: ‘file’,
ext: ‘.txt’
});
console.log(pathStr); // /user/docs/file.txt
實際應用示例
示例 1: 構建跨平臺的文件路徑
const configPath = path.join(__dirname, ‘config’, ‘settings.json’);
console.log(configPath);
示例 2: 處理用戶上傳的文件
function saveUploadedFile(uploadDir, originalName) {
const ext = path.extname(originalName);
const baseName = path.basename(originalName, ext);
const timestamp = Date.now();
const newFileName = ${baseName}_${timestamp}${ext}
;
return path.join(uploadDir, newFileName);
}
示例 3: 檢查文件擴展名
function isImageFile(filename) {
const ext = path.extname(filename).toLowerCase();
return [‘.jpg’, ‘.jpeg’, ‘.png’, ‘.gif’].includes(ext);
}
os:
提供有關操作系統、計算機和網絡接口的信息
const os = require(‘os’);
console.log(os.platform()); // 輸出: 例如 ‘darwin’、‘win32’ 或 ‘linux’
url:
用于解析和格式化 URL
const url = require(‘url’);
const myUrl = new URL(‘http://www.example.com’);
console.log(myUrl.hostname); // 輸出: www.example.com
events:
提供基本的 EventEmitter 實現,用于處理事件
const EventEmitter = require(‘events’);
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on(‘event’, () => {
console.log(‘an event occurred!’);
});
myEmitter.emit(‘event’); // 輸出: an event occurred!
util:
提供了一些實用工具函數,如 util.promisify,用于將回調風格的函數轉換為返回 Promise 的函數。
示例代碼:
const util = require(‘util’);
const fs = require(‘fs’);
const stat = util.promisify(fs.stat);
stat(‘.’).then((stats) => {
console.log(It's a ${stats.isDirectory() ? 'directory' : 'file'}
);
}).catch((error) => {
console.error(error);
});
stream:
提供了多種流對象,如可讀流(Readable)、可寫流(Writable)、雙工流(Duplex)和轉換流(Transform),用于高效地處理流式數據。
示例代碼:使用 Readable 流:
const { Readable } = require(‘stream’);
const readableStream = Readable({
read() {} // 這里可以添加讀取邏輯,但在這個例子中不實現任何讀取邏輯。
});
readableStream.push('Hello ');
readableStream.push(‘World!\n’);
readable
=============================================
事件監聽案例
const EventEmitter = require(‘events’);
var eventEmitter = new EventEmitter();
eventEmitter.on(‘click’, () => {
console.log(‘data received successfully.’);
});
eventEmitter.emit(‘click’,demo);
文件讀取和寫入: