2024年【Nodejs】学习之常用内置模块_nodejs内置模块有哪些,大数据开发之内存泄漏调试学习与总结

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

res.on(‘data’, data => {
console.log(data.toString());
console.log(JSON.parse(data.toString()));
})
});


发送post请求:



const req = http.request({
method: ‘POST’,
hostname: “localhost”,
port: 8000
}, (res) => {
res.on(‘data’, data => {
console.log(data.toString());
console.log(JSON.parse(data.toString()));
})
})

req.on(‘error’, err => {
console.log(err);
})

req.end();


  

### 内置url模块




| url模块的使用 | 说明 |
| --- | --- |
| url.parse() | 解析 url(第二个参数为true,可以将 query 里面的数据转换为对象) |
| url.format(urlObject) | 是上面 url.parse() 操作的逆向操作 |
| url.resolve(from,to) | 添加或者替换地址 |


**URL包含的属性**



const url = require(‘url’);

// 解析请求
const parseInfo = url.parse(req.url);
console.log(parseInfo);


解析结果:



Url {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: ‘?name=why&password=123’,
query: ‘name=why&password=123’,
pathname: ‘/login’,
path: ‘/login?name=why&password=123’,
href: ‘/login?name=why&password=123’
}


  

#### 获取query参数



const url=require(‘url’);

var api=‘http://www.itying.com?name=zhangsan&age=20’;

// console.log(url.parse(api,true));

var getValue=url.parse(api,true).query;

console.log(getValue);

console.log(姓名:${getValue.name}--年龄:${getValue.age});


  

#### 使用querystring内置模块


除了上面的获取参数的方式,我们也可以**使用querystring内置模块**



const { pathname, query } = url.parse(req.url);

const queryObj = qs.parse(query);
console.log(queryObj.name);
console.log(queryObj.password);


  

### 内置fs模块


#### 三种操作方式


Node文件系统的API非常的多


* 我们不可能,也没必要一个个去学习;
* 这个更多的应该是作为一个API查询的手册,等用到的时候查询即可;
* 学习阶段我们只需要学习最常用的即可;


但是这些API大多数都提供三种操作方式:


* 方式一:同步操作文件:代码会被阻塞,不会继续执行;
* 方式二:异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数被执行;
* 方式三:异步Promise操作文件:代码不会被阻塞,通过 `fs.promises` 调用方法操作,会返回一个Promise,可以通过then、catch进行处理;


**我们这里以获取一个文件的状态为例:**


* 注意:都需要引入 `fs` 模块;


方式一:同步操作文件



// 1.方式一: 同步读取文件
const state = fs.statSync(‘…/foo.txt’);
console.log(state);

console.log(‘后续代码执行’);


方式二:异步回调函数操作文件



// 2.方式二: 异步读取
fs.stat(“…/foo.txt”, (err, state) => {
if (err) {
console.log(err);
return;
}
console.log(state);
})
console.log(“后续代码执行”);


方式三:异步Promise操作文件



// 3.方式三: Promise方式
fs.promises.stat(“…/foo.txt”).then(state => {
console.log(state);
}).catch(err => {
console.log(err);
})
console.log(“后续代码执行”);


  

#### 常用API


**stat()**


每个文件都带有一组详细信息,可以使用 Node.js 进行检查。


具体地说,使用 `fs` 模块提供的 `stat()` 方法。



const fs = require(‘fs’)
fs.stat(‘/Users/joe/test.txt’, (err, stats) => {
if (err) {
console.error(err)
return
}

stats.isFile() //true
stats.isDirectory() //false
stats.isSymbolicLink() //false
stats.size //1024000 //= 1MB
})


* 使用 `stats.isFile()` 和 `stats.isDirectory()` 判断文件是否目录或文件。
* 使用 `stats.isSymbolicLink()` 判断文件是否符号链接。
* 使用 `stats.size` 获取文件的大小(以字节为单位)。


  

**readFile()**



const fs = require(‘fs’)

fs.readFile(‘/Users/joe/test.txt’, ‘utf8’ , (err, data) => {
if (err) {
console.error(err)
return
}
console.log(data)
})


另外,也可以使用同步的版本 `fs.readFileSync()`:



const fs = require(‘fs’)

try {
const data = fs.readFileSync(‘/Users/joe/test.txt’, ‘utf8’)
console.log(data)
} catch (err) {
console.error(err)
}


  

**fs.writeFile()**



const fs = require(‘fs’)

const content = ‘一些内容’

fs.writeFile(‘/Users/joe/test.txt’, content, err => {
if (err) {
console.error(err)
return
}
//文件写入成功。
})


另外,也可以使用同步的版本 `fs.writeFileSync()`:



const fs = require(‘fs’)

const content = ‘一些内容’

try {
const data = fs.writeFileSync(‘/Users/joe/test.txt’, content)
//文件写入成功。
} catch (err) {
console.error(err)
}


默认情况下,此 API 会替换文件的内容(如果文件已经存在)。


可以通过指定标志来修改默认的行为:



fs.writeFile(‘/Users/joe/test.txt’, content, { flag: ‘a+’ }, err => {})


可能会使用的标志有:


* `r+` 打开文件用于读写。
* `w+` 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
* `a` 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
* `a+` 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。


**fs.appendFile()**


将内容追加到文件末尾的便捷方法是 `fs.appendFile()`(及其对应的 `fs.appendFileSync()`):



const content = ‘一些内容’

fs.appendFile(‘file.log’, content, err => {
if (err) {
console.error(err)
return
}
//完成!
})


  

**fs.mkdir()**


使用 `fs.mkdir()` 或 `fs.mkdirSync()` 可以创建新的文件夹。



const fs = require(‘fs’)

const folderName = ‘/Users/joe/test’

try {
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName)
}
} catch (err) {
console.error(err)
}


  

### 内置path模块


#### path常见的API


**从路径中获取信息**


* dirname:获取文件的父文件夹;
* basename:获取文件名;
* extname:获取文件扩展名;



const path = require(“path”);

const myPath = ‘/Users/coderwhy/Desktop/Node/课堂/PPT/01_邂逅Node.pdf’;

const dirname = path.dirname(myPath);
const basename = path.basename(myPath);
const extname = path.extname(myPath);

console.log(dirname); // /Users/coderwhy/Desktop/Node/课堂/PPT
console.log(basename); // 01_邂逅Node.pdf
console.log(extname); // .pdf


  

#### 路径的拼接


* 如果我们希望将多个路径进行拼接,但是不同的操作系统可能使用的是不同的分隔符;
* 这个时候我们可以使用`path.join`函数;



console.log(path.join(‘/user’, ‘why’, ‘abc.txt’));


**将文件和某个文件夹拼接**


* 如果我们希望将某个文件和文件夹拼接,可以使用

 

path.resolve


	+ `resolve`函数会判断我们拼接的路径前面是否有 `/`或`../`或`./`;
	+ 如果有表示是一个绝对路径,会返回对应的拼接路径;
	+ 如果没有,那么会和当前执行文件所在的文件夹进行路径的拼接



path.resolve(‘abc.txt’); // /Users/coderwhy/Desktop/Node/TestCode/04_learn_node/06_常见的内置模块/02_文件路径/abc.txt
path.resolve(‘/abc.txt’); // /abc.txt
path.resolve(‘/User/why’, ‘abc.txt’); // /User/why/abc.txt
path.resolve(‘User/why’, ‘abc.txt’); // /Users/coderwhy/Desktop/Node/TestCode/04_learn_node/06_常见的内置模块/02_文件路径/User/why/abc.txt

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

‘User/why’, ‘abc.txt’); // /Users/coderwhy/Desktop/Node/TestCode/04_learn_node/06_常见的内置模块/02_文件路径/User/why/abc.txt

[外链图片转存中…(img-jx9BRLxA-1715578897433)]
[外链图片转存中…(img-JNwixIhh-1715578897433)]
[外链图片转存中…(img-Xkr4Xrjm-1715578897434)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值