一些些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