正在完善中,敬请期待!
- WEB前端181
- Linux74
- 数据库66
- Node后端51
- Vue345
- 小程序44
- Ubuntu35
- Nestjs35
- MySql26
- HTML25
- Nginx23
- WEB服务器23
- Redis20
- 数据可视化18
- Echarts18
- TypeScript18
- Nodejs16
- Shell10
- CSS10
- 路由10
- TypeORM10
- Sass8
- MongoDB8
- uniApp7
- Docker4
- Pinia4
- 状态管理4
- Kubernetes2
- Electron2
- JavaScript2
- Vite2
- Mongoose2
- 网络请求1
- Vue路由1
正在完善中,敬请期待!
学习本章节之前,先看一下这里!
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。
Node.js 是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!
Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。
当 Node.js 执行 I/O 操作时(例如从网络读取、访问数据库或文件系统),Node.js 会在响应返回时恢复操作,而不是阻塞线程并浪费 CPU 循环等待。
这使 Node.js 可以在一台服务器上处理数千个并发连接,而无需引入管理线程并发的负担(这可能是重大 bug 的来源)。
Node.js 具有独特的优势,因为为浏览器编写 JavaScript 的数百万前端开发者现在除了客户端代码之外还可以编写服务器端代码,而无需学习完全不同的语言。
在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为不必等待所有用户更新其浏览器,你可以通过更改 Node.js 版本来决定要使用的 ECMAScript 版本,并且还可以通过运行带有标志的 Node.js 来启用特定的实验中的特性。

Node.js 的事件循环阐明了Node.js 如何做到异步且具有非阻塞的 I/O。
调用堆栈 💎
调用堆栈是一个 LIFO 队列(后进先出)。
事件循环不断地检查调用堆栈,以查看是否需要运行任何函数。
const fo1 = () => console.log('fo1')
const fo2 = () => console.log('fo2')
const fo3 = () => {
console.log('fo3')
fo1()
fo2()
}
fo3()
// 运行效果: fo3 fo1 fo2
全局对象 💎

在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件。
所有这些产生事件的对象都是 events.EventEmitter 的实例,实例化生成的对象叫做事件触发器。
// 引入 events 事件模块
var events = require('events')
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter()
// 添加事件监听器
eventEmitter.on('func1', (number) => {
console.log('func1事件触发')
console.log(number)
})
// 事件监听器可以添加多个
eventEmitter.on('func1', (number) => {
console.log('我是第二个func1')
})
// 触发事件
eventEmitter.emit('func1', 123)
// 移除事件监听器
eventEmitter.removeAllListeners(['func1'])

Buffer 是内存区域,一个专门存放二进制数据的缓冲区。
-
将数据写入缓冲区:
Buffer.from(string[, encoding]) -
从缓冲区读取数据:
Buffer.toString([encoding[, start[, end]]]) -
合并Buffer:
Buffer.concat([buf, buf1])

流是为 Node.js 应用程序提供动力的基本概念之一。
流是一种以高效的方式处理读/写文件、网络通信、或任何类型的端到端的信息交换。
stream 提供了构建所有流 API 的基础。 所有的流都是 EventEmitter 的实例。

HTTP 核心模块是 Node.js 网络的关键模块。
使用该模块可以创建web服务器。
// 引入http模块
const http = require('http')
// 创建 Web 服务器
const server = http.createServer((req, res) => {
//返回 http.Server 类的新实例
//req是个可读流(请求对象)
//res是个可写流(响应对象)
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
res.write('服务器响应了,这是响应内容')
res.end()
})
// 启动服务器并监听某个端口
server.listen('3030', () => {
console.log('服务器已做好准备,正在监听3030端口')
})

获取Get请求内容 💎
// 浏览器访问地址 : http://localhost:3030/?name=lcl&age=10
// 引入http模块
const http = require('http')
const url = require('url')
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
const query = url.parse(req.url, true).query
for ([key, value] of Object.entries(query)) {
res.write(key + ':' + value)
}
res.end()
})
// 启动服务器并监听某个端口
server.listen('3030', () => {
console.log('服务器已做好准备,正在监听3030端口')
})