NodeJS基础

3/30/2024 NodeJS

# 一、Node.js

Node.js 是一个开源的,跨平台的JavaScript运行环境。 也就是说它一个应用程序,可以运行JavaScript。

作用:可以开发服务器应用、开发工具类应用(webpack、vite、bable)、开发桌面端应用(VSCode、Figma、Postman 都是基于electron,而electron是nodejs开发)

# 二、命令行工具

# 1.打开

windows键,输入cmd 或者 win+R 输入 cmd 能打开命令行工具窗口(终端)

# 2.命令结构

命令名称(空格)参数1(空格)参数2

# 3.常用命令

切换命令:

  • 切换盘符 c: d:
  • 切换到上一级 cd ..
  • 切换到指定目录 cd 目录名 查看目录 dir

# 4.执行nodejs

node nodejs文件

# 三、Nodejs语法

![[nodejs核心语法.png]]

# 四、Buffer

# 1、概念

缓冲区,是一个类似于数组的对象,用于表示固定长度的字节序列。 本质是一段内存空间,用于处理二级制数据。

# 2、特点

1.buffer大小固定且无法调整。 2.性能较好,可以直接对计算机内存进行操作。 3.每个元素的大小为1字节(byte)

# 3、使用

# 1.创建buffer

// 通过alloc方式创建一个大小为10字节的Buffer区域,每个位置都会归0 
let buf = Buffer.alloc(10); 
// 输出为 <Buffer 00 00 00 00 00 00 00 00 00 00> 

// 通过alloUnsafe方式创建,通用是10字节,但是不安全,相比较于alloc, 
// 它没有每个位置都归0,还存在之前的数据,所以不安全,但是速度快于alloc。 
let buf_2 = Buffer.allUnsafe(10); 

// from方式, 
let buf_3 = Buffer.from("123"); 
console.log(buf_3); 
/** 
  Buffer.from(string[, encoding]) 
    传入的第一个参数是字符串类型时,Buffer.from会根据字符串的编码(encoding参数,默认是utf8)生成该字符串对应的二进制表示 
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.操作buffer

// buffer 与字符串的转换 
let buf_str = Buffer.from("12342df"); console.log(buf_str.toString()); 

// 类似数组操作单个元素 
let buf = Buffer.from("hello"); 
console.log(buf[0]); //
console.log(buf[0].toString(2)); // 转换成二进制 

// 溢出 
buf[0] = 360; // 360的二进制是 0001 0110 1000,给buffer赋值后会出现溢出,舍弃高位值,变成 0110 1000 
console.log(buf[0].toString(2)); 

// 中文,一个utf-8的中文是3个字节 
let buf_2 = Buffer.from("你好"); 
console.log(buf_2);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 五、fs模块

# 1.文件的写入

1.同步

2.异步

# 2.文件的读取

# 六、path模块

# 七、http模块

get请求和post请求的区别

  • 作用上,get一般用来请求数据,post一般用来提交数据;
  • 参数位置不同,get是url后直接带上,post参数在请求体中;
  • post相对于get来说,更安全一点,参数不那么容易泄露;
  • get请求大小有限制的,一般是2K,post则没有限制;

# https

http+ssl(secure socket layer 安全套接层),https 可以加密报文,安全的http

# 获取 https 证书

工具地址 : https://certbot.eff.org

步骤:

  1. 安装好工具
  2. 管理员运行命令
certbot certonly --statndalone
1
  1. 创建代码
//https证书目录
let httpsOption = {
    key: fs.readFileSync("/etc/letsencrypt/path/to/privkey.pem"),
    cert: fs.readFileSync("/etc/letsencrypt/path/to/cert.pem")),
    ca: fs.readFileSync("/etc/letsencrypt/path/to/chain.pem"))
}
let server = https.createServer(httpsOption,app);
1
2
3
4
5
6
7

# 八、模块化

定义:将一个复杂的程序按照一定规则(规范) 拆分成多个程序的过程,叫模块化。这些单个的程序叫模块,通常都是独立的。

理解:大的按规则拆分成很多小的。 优点:有助于提高系统的可维护性、可复用性和可扩展性。

# nodejs 暴露写法

  1. module.exports = value
  2. exports.name = value

注意点

  • module.exports可以暴露任何数据,常见 变量、对象;
  • exports 隐式等于 module.exports,但不能使用exports = value这种,因为 exports = module.exports = {},而require导入的是 module.exports 的值而不是 exports的值,注意,默认 exports 是等于 module.exports的,所以用 exports.name = value相当于是 module.exports.name = value 是没有问题的。

# 导入模块

使用 require(路径) 引入。 注意事项(了解):

  1. 对于自己创建的模块,建议路径写相对路径,不能省略 ./ 或 ../
  2. js、json导入时可以不用写后缀,js、json同名且都没写后缀时,先找是不是js文件。c/c++编写的nodejs扩展也可以不写。但建议写上
  3. 导入其他文件时,会按js类型处理。
  4. 如果导入的路径是一个文件夹,首先检测文件下 package.json 文件中 main 属性对应的文件,如果存在则导入,如果不存在则会报错。如果main属性不存在,或者 package.json 不存在,则会导入文件下的 index.js 和 index.json,若还是没有则会报错。

# 导入自定义模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件
  2. 缓存检测
  3. 读取目标文件代码
  4. 将读取的代码包裹为一个函数并执行(自执行函数)。通过 arguments.callee.toString()查看自执行函数
  5. 缓存模块的值
  6. 返回module.exports的值

arguments.callee 指向的是当前函数对象

# 九、包管理工具

参见[[包管理工具]]

# 十、nvm,node版本控制的工具

参见[[nvm]]

# 十一、Express框架

参见

Last Updated: 2/15/2025, 2:22:53 PM