网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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
既有适合小白学习的零基础资料,也有适合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%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新