一些些node基础知识点
Node.js
Node.js是一个用 c/c++打造的 js 引擎,它能够读懂 js 并且让 js 拥有跟 js 系统打交道的能力
创建项目
npm init
在集成终端中输入npm init
进行设置



package.json相当于是这个项目的说明书
我们常用的npm init -y是默认全部选择全部为yes,直接生成package.json
内容生成:

main
指的是这行代码:

这行代码的作用是读取express/index.js,默认会搜索require('express')中express包里的内容。
script脚本
scripts 字段允许你定义可执行的脚本命令,这些命令可以通过 npm run <script-name> 来执行。
我们增加script里的内容:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"server":"node index.js",
"hello":"echo hello world",
"dev":"npm run hello && node index.js"
}
下面是每个脚本的作用:
"test": 这个脚本目前设置为输出一条错误信息 "Error: no test specified",然后退出并返回状态码1。通常,test脚本用于运行项目的测试。"server": 用于启动 Node.js 应用,通过执行node index.js命令。这里假设应用入口文件是index.js。"hello": 输出 "hello world" 到控制台。"dev": 这是一个组合脚本,首先执行"hello"脚本,然后执行"server"脚本。所以运行npm run dev时,它会先打印 "hello world",然后启动服务器。 像这样:

Express 框架
Express 是一个基于 Node.js 平台的极简和灵活的 web 应用开发框架,提供了一系列强大的功能,帮助创建各种 Web 和移动设备应用。
在集成终端中输入npm i express安装express
安装完成后可以在package.json里看到:

Express使用
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Welcome to Node')
})
app.listen(port, () => {
console.log('项目已启动在3000端口!!!');
})
然后我们运行index.js

在浏览器中搜索localhost:3000,显示:

nodemon
当我们修改想要得到的内容的时候,项目是不会自动重新运行的,这个时候我们就可以采用nodemon进行监听。
nodemon 是一个开发工具,用于监视任何变化在 Node.js 应用程序中的文件,并自动重启服务器。它允许开发者在代码更改后立即看到结果,而无需手动重启服务器。
使用命令行npx nodemon index.js 运行nodemon,这样保存的话会自动重启运行一遍代码

模块化
模块化是软件开发中的一种重要概念,它允许将代码分解成独立的模块,每个模块封装了特定的功能。在 JavaScript 中,有多种模块化规范:
-
CommonJS:
- Node.js 使用的模块系统。
- 模块通过
module.exports对象暴露接口。 - 模块加载使用
require函数。
-
AMD (Asynchronous Module Definition) :
- 异步模块定义,主要用于浏览器环境。
- 通过
define函数定义模块,使用require来异步加载模块。 - 目的是解决浏览器中脚本依赖的问题。
-
CMD (Common Module Definition) :
- 与 AMD 类似,也是用于浏览器环境的模块定义方式。
- 强调运行时的依赖加载,使用
define函数定义模块,require函数加载依赖。
-
UMD (Universal Module Definition) :
- 通用模块定义,旨在提供一种方式,使模块可以在各种环境中工作,包括浏览器和 Node.js。
- 可以检测环境并使用相应的模块系统(AMD、CommonJS 或作为全局变量)。
-
ESM (ECMAScript Modules) :
- ECMAScript 模块,是 JavaScript 语言规范的一部分。
- 使用
import和export关键字来导入和导出模块。 - 原生支持异步加载和动态导入。
每种模块化规范都有其特定的使用场景和特点:
- CommonJS 主要用于 Node.js 环境,是同步加载模块的。
- AMD 和 CMD 主要用于浏览器环境,支持异步加载模块,有助于解决依赖管理和按需加载的问题。
- UMD 提供了一种兼容多种环境的解决方案,使得一个模块可以在 Node.js、AMD 环境或作为浏览器全局变量中使用。
- ESM 是现代 JavaScript 的模块化方案,提供了语言层面的支持,使得模块化更加简洁和强大
global
在 Node.js 中: global 对象是 Node.js 的全局命名空间。
它包含了 Node.js 环境中的所有全局变量和函数,比如 process, Buffer, require, console 等。
在 Node.js 中,global 对象可以通过 global 直接访问,例如:
console.log(global); // 打印 Node.js 的全局对象

__dirname
在 Node.js 中,__dirname 是一个全局变量,返回当前执行脚本所在目录的绝对路径。

__filename
__filename 是一个全局变量,它返回当前执行脚本的文件名。这个变量包含了文件的完整路径,包括文件名和扩展名。

process
process 是一个全局对象,它代表当前 Node.js 进程。这个对象包含了有关 Node.js 进程的信息,并且提供了一些控制进程的方法
process.argv:一个数组,包含了启动 Node.js 进程时的命令行参数。第一个元素是 node,第二个元素是正在执行的脚本的路径,其余元素是传递给脚本的额外参数。

Buffer
Buffer 是一个全局对象,用于处理二进制数据。Buffer 类似于一个整数数组,但它用于表示字节(8 位)数据。Buffer 对象在 Node.js 中用于处理流和协议,以及在文件系统和网络操作中传输数据。
Buffer.alloc()
分配指定大小的内存,并且可以指定初始值来填充这个 Buffer。
// 创建一个大小为 10 的 Buffer,用 0x00 字节填充
const buf1 = Buffer.alloc(10);
console.log(buf1);
// 创建一个大小为 10 的 Buffer,用 0xFF 字节填充
const buf2 = Buffer.alloc(10, 0xFF);
console.log(buf2);
// 创建一个大小为 10 的 Buffer,用'a'的 UTF-8 编码形式填充
console.log( Buffer.alloc(10, 'a', 'utf8'));

Buffer在JavaScript 中是没有的,因为Node.js 是 JavaScript 的服务器端运行环境,提供了文件系统、网络和操作系统等系统级功能,而浏览器中的 JavaScript 受限于安全和用途,不包括这些底层访问能力。
Buffer.from()
Buffer.from 是 Node.js 中用于创建 Buffer 对象的方法,允许从多种数据类型转换为 Buffer
把字符串'hello world'转为buffer流:
console.log(Buffer.from('hello world'));

把数组转为buffer流:
console.log(Buffer.from([0X68]));

node 中的模块
fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
如果要在JavaScript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它:
const fs = require('fs')
异步和同步方法:fs 模块提供了异步和同步两种方法来执行文件操作。异步方法通常以回调函数作为参数,而同步方法通常以操作名称加上 "Sync" 后缀命名。
fs.readFile()读取文件
语法格式
使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:
[`fs.read(fd[, options], callback)`]
参数解读
-
参数1:必选参数,字符串,表示文件的路径。
-
参数2:可选参数,表示以什么编码格式来读取文件。
-
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。 创建一个txt文件,往里面写入内容
示例
创建一个txt文件,写入内容:

执行代码:
const fs = require('fs');
const fileContent = fs.readFileSync('./text.txt', 'utf-8')//同步语法
console.log(fileContent);
'utf-8'的目的是把默认读成的buffer流转成中文
输出:

fs.writeFile()写入内容
语法格式
使用fs.writeFile()方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file, data[, options], callback)
参数解读
-
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
-
参数2:必选参数,表示要写入的内容。
-
参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8。
-
参数4:必选参数,文件写入完成后的回调函数。
示例
执行代码:
const fs = require('fs');
fs.writeFileSync('./readme.md', '菲律宾香蕉脆片')
console.log(fs.statSync('./text.txt'));
结果输出:

转载自:https://juejin.cn/post/7387981935009890338