0%

nodeJs笔记

  Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 提供了许多内置模块,例如文件系统(fs)、HTTP、网络通信等,使得开发者可以轻松地构建高性能的服务器端应用程序。此外,通过使用 npm(Node Package Manager),开发者还可以方便地管理项目依赖和第三方库。

主要特点

1.事件驱动和非阻塞 I/O:
Node.js 采用事件驱动模型,非阻塞 I/O 操作,使其非常适合处理高并发连接和实时 Web 应用。

2.单线程:
Node.js 在单线程上运行,但通过使用事件循环机制,它能够高效地处理异步操作。

3.跨平台:
Node.js 可以在 Windows、Linux 和 macOS 等操作系统上运行,具有良好的跨平台兼容性。

4.丰富的生态系统:
Node.js 拥有庞大的包管理器 npm(Node Package Manager),提供了海量的第三方库和工具,极大地简化了开发过程。

5.适合 I/O 密集型应用:
由于其非阻塞 I/O 和事件驱动的特性,Node.js 特别适合开发需要处理大量并发请求、文件操作或网络 I/O 的应用。

nodejs作用

  • 开发服务端应用
  • 开发工具类应用
  • 开发桌面端应用

nodejs注意点

  • nodejs不是js,他们都用ECMAScript作为核心语法
  • nodejs中不能使用BOM和DOM的API,可以用console和定时器API
  • 顶级对象为global,可以用globalThis访问顶级对象

内置模块

1. Buffer

  • buffer是一个类似于数组的对象
  • 本质是一段内存空间,专门用来处理二进制数据
  • 可以用toString()转换为字符串

2. fs模块

引入方式:commonjs规范

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

const fs = require('fs')

// 创建文件夹
fs.mkdir('./logs', (err) => {
console.log('done.')
})

// 文件夹改名(logs->log)
fs.rename('./logs', './log', () => {
console.log('done')
})

// 删除文件夹
fs.rmdir('./log', () => {
console.log('done.')
})

// 写内容到文件里
fs.writeFile(
'./logs/log1.txt',
'hello', // 写入内容
// 错误优先的回调函数
(err) => {
if (err) {
console.log(err.message)
} else {
console.log('文件创建成功')
}
}
)

// 给文件追加内容
fs.appendFile('./logs/log1.txt', '\nworld', () => {
console.log('done.')
})

// 读取文件内容
fs.readFile('./logs/log1.txt', 'utf-8', (err, data) => {
// error-first 风格
console.log(data)
})

fs.readFile("./avatar/a.txt",(err,data)=>{
if(!err){
console.log(data.toString("utf-8"))
}
})

// 删除文件
fs.unlink('./logs/log1.txt', (err) => {
console.log('done.')
})

// 批量写文件
for (var i = 0; i < 10; i++) {
fs.writeFile(`./logs/log-${i}.txt`, `log-${i}`, (err) => {
console.log('done.')
})
}

// 读取文件/目录信息
fs.readdir('./', (err, data) => {
data.forEach((value, index) => {
fs.stat(`./${value}`, (err, stats) => {
// console.log(value + ':' + stats.size)
console.log(value + ' is ' + (stats.isDirectory() ? 'directory' : 'file'))
})
})
})

// 异步读取文件:方法一
fs.readFile('./logs/log-0.txt', 'utf-8', (err, content) => {
console.log(content)
console.log(0)
})
console.log(1)

// 异步读取文件:方法二
const fs = require("fs").promises
fs.readFile('./logs/log-0.txt', 'utf-8').then(result => {
console.log(result)
})

3. http模块

要使用 HTTP 服务器和客户端,则必须 require(‘http’)。require 方式是 commonJS 模块方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const http = require('http');

// 创建本地服务器来从其接收数据
const server = http.createServer((req, res) => {
// 响应头:
// 状态码:200、404 ...
// 响应内容: application/json
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'Hello World!'
}));
});

server.listen(8000); // 监听端口号8000

4. url模块

4.1 parse

1
2
3
4
5
6
7
const url = require('url');

// 解析网址
let { pathname, query } = url.parse('http://www.baidu.com/index?id=1&name=zs', true);
console.log(pathname); // /index
console.log(query); // { id: '1', name: 'zs' }

4.2 format

1
2
3
4
5
6
7
8
9
10
11
const url = require('url');

// 格式化网址
let myUrl = {
protocol: 'http',
hostname: 'www.baidu.com',
pathname: '/index',
query: { id: 1, name: 'zs' }
};
console.log(url.format(myUrl)); // http://www.baidu.com/index?id=1&name=zs

4.3 resolve

1
2
3
4
5
6
const url = require('url');

// 解析网址
let myUrl = url.resolve('/one/two/three', 'four'); // /one/two/four
console.log(myUrl);

5. path模块

5.1 join

1
2
3
4
5
6
const path = require('path')

// 拼接路径
let newPath = path.join('/a/', '/b/c', 'd.txt')
console.log(newPath) // \a\b\c\d.txt

6. events模块

1
2
3
4
5
6
7
8
9
10
11
const EventEmitter = require('events')

class MyClass extends EventEmitter {}

const myClass = new MyClass()
myClass.on('sayHello', () => {
console.log('hello')
})

myClass.emit('sayHello')

持续更新…

赏包辣条吃吧