nodejs03-常用模块

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’);
常用方法

  1. path.join([…paths]) - 连接路径
    const fullPath = path.join(‘/user’, ‘documents’, ‘file.txt’);
    console.log(fullPath);
    // 在 Unix 上输出: /user/documents/file.txt
    // 在 Windows 上输出: \user\documents\file.txt

  2. path.resolve([…paths]) - 解析绝对路径
    const absolutePath = path.resolve(‘src’, ‘app.js’);
    console.log(absolutePath);
    // 输出当前工作目录下的绝对路径,如: /home/user/project/src/app.js

  3. path.basename(path[, ext]) - 获取文件名
    console.log(path.basename(‘/user/docs/file.txt’)); // file.txt
    console.log(path.basename(‘/user/docs/file.txt’, ‘.txt’)); // file

  4. path.dirname(path) - 获取目录名
    console.log(path.dirname(‘/user/docs/file.txt’)); // /user/docs

  5. 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);

=================================
文件删除:

const fs = require('fs');
fs.unlink('C:\\Users\\Administrator\\Desktop\\access.log',(error)=>{
   if(error){
     console.log(error);
     return;
   }
   console.log('success');
});

文件其他操作:

const fs = require('fs');
fs.writeFile('C:\\Users\\Administrator\\Desktop\\error.log',(new Date()).toString(),{encoding:'utf8'},(error)=>{
 if(error){
     console.log(error);
     return;
   }
   console.log('success');
});

const fs = require(‘fs’);
fs.writeFile(‘C:\Users\Administrator\Desktop\error.log’,(new Date()).toString(),{encoding:‘utf8’},(error)=>{
if(error){
console.log(error);
return;
}
console.log(‘success’);
});

fs.appendFile(‘C:\Users\Administrator\Desktop\error.log’,(new Date()).toString(),{encoding:‘utf8’},(error)=>{
if(error){
console.log(error);
return;
}
console.log(‘success’);
});

fs.mkdir(‘aaa/bbb/ccc’,{recursive:true},(error)=>{
if(error){
console.log(error);
return;
}
console.log(‘success’);
});

fs.readdir(‘\.’,(error,files)=>{
if(error){
console.log(error);
return;
}
console.log(files);
});

fs.rmdir(‘aaa’,(error)=>{
if(error){
console.log(error);
return;
}
console.log(‘success’);
});

============================================
文件stream 流操作

const fs = require('fs');
let data ='';
//读取
const stream = fs.createReadStream('C:\\Users\\Administrator\\Desktop\\error.log',{encoding:'utf8'});
stream.on('data',(chunk)=>{
    data += chunk;
});
stream.on('end',()=>{
    console.log(data);
});
stream.on('error',(err)=>{
  console.log(err);
});

//写入
const writeStream = fs.createWriteStream('C:\\Users\\Administrator\\Desktop\\error2.log',{encoding:'utf8'});
writeStream.on('data',(chunk)=>{
  writeStream.write(chunk);
});

writeStream.on('end',()=>{
    writeStream.end();
    console.log('read finished');
});
writeStream.on('finish',()=>{
    writeStream.end();
    console.log('write finished');
});
writeStream.on('error',(err)=>{
  console.log(err);
});

管道流:

const fs = require('fs');
const stream = fs.createReadStream('C:\\Users\\Administrator\\Desktop\\error.log',{encoding:'utf8'});
const writeStream = fs.createWriteStream('C:\\Users\\Administrator\\Desktop\\error2.log',{encoding:'utf8'});
stream.pipe(writeStream);
writeStream.on('finish',()=>{
    console.log('write finished');
});

数据转化流

const fs = require('fs');
const zlib = require('zlib');
const stream = fs.createReadStream('C:\\Users\\Administrator\\Desktop\\error.log',{encoding:'utf8'});
const writeStream = fs.createWriteStream('C:\\Users\\Administrator\\Desktop\\error2.log',{encoding:'utf8'});
stream.pipe(writeStream);
writeStream.on('finish',()=>{
    console.log('write finished');
});

fs.createReadStream('C:\\Users\\Administrator\\Desktop\\error.log',{encoding:'utf8'})
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('C:\\Users\\Administrator\\Desktop\\error.zip'));

===========================================
http 模块:
const https = require(‘https’);
const fs = require(‘fs’);
const req = https.request(‘https://img1.baidu.com//it//u=2610036422,1872228329&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750’,(res)=>{
console.log(res.statusCode);
res.pipe(fs.createWriteStream(‘a.jpg’));
});

req.end();

===========================
const http = require(‘http’);
const server = http.createServer((req,res)=>{
res.end(JSON.stringify(req.headers));
}
);
server.listen(8080,()=>{
console.log(‘listening on 8080!’);
});

http://localhost:8080/ 查看输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值