3、Node.js------Node的核心模块

本文详细介绍了Node.js中的核心模块,包括http模块用于创建服务器和发起请求,url模块处理和解析URL,querystring模块解析查询字符串,Buffer模块处理二进制数据,以及fs模块实现文件系统的交互,如读写文件、删除、重命名等。此外,还讨论了npm安装第三方模块的方法和不同选项。
摘要由CSDN通过智能技术生成

http模块、url模块、querystring模块 

(一)什么是模块

在Node.js中,所谓的模块,其实就是一个文件,一个文件就是一个模块,模块是Node.js应用程序的基本组成部分。

Node.js中的模块分三种:

核心模块:核心模块是Node.js自带的模块,比如http、fs、net、url、path等,可以直接使用,是Node.js中内置好的。

用户自定义模块:通常是在项目中,根据需求自己编写的js代码。

第三方模块:一些比较通用的,但是Node.js自身没有提供的,如nodemon、mysql、express等。

(二)Node中的模块-第三方模块

 (1)npm install module_name -S

即 npm install --save 写入dependencies 用于生产环境

(2)npm install module_name -D

即 npm install --save--dev 写入devDependencies 仅用于开发环境

(3)npm install module_name  -g

全局安装(不进入项目目录)

(4)npm install module_name

本地安装(安装包放在 ./node_modules 下)

npm install -g cnpm --registry=https://registry.npm.taobao.org

(三)http模块

http模块是node提供的基于http协议的通信模块,可以用于创建http服务器,也可以作为客户端向其他服务器发起请求。

要使用 HTTP 服务器和客户端,必须 require('http')。

(1)作为服务器接受客户端请求示例:

 (2)Node作为客户端,是向其他服务端口请求数据。

(四)nodemon或supervisor模块 

nodemon或者supervisor提供类似的功能,监听文件变化,自动重启服务,热启动,nodemon或supervisor模块的按装与使用:

注意:以管理员身份打开CMD命令台

npm install nodemon -g

npm install supervisor -g

(五)url模块

url 模块用于处理与解析 URL 

URL() 构造函数返回一个新创建的 URL 对象,表示由一组参数定义的 URL。

语法: const url = new URL(url [, base])

假设一个地址:https://www.baidu.com:8080/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1 

console.log(u.pathname) //    /s

console.log(u.host)// www.baidu.com:8080

console.log(u.hostname) // www.baidu.com

console.log(u.href) console.log(u.searchParams.get("ie")) //utf-8 console.log(u.searchParams.has("f")) // true

(六)querystring模块

querystring 模块提供用于解析和格式化 URL 查询字符串的实用工具。

 语法:querystring.parse(str[, sep[, eq[, options]]])

str <string> 要解析的 URL 查询字符串。

sep <string> 用于在查询字符串中分隔键值对的子字符串。默认值: '&'。

eq <string> 用于在查询字符串中分隔键和值的子字符串。默认值: '='。

options <Object>

querystring.stringify(obj[, sep[, eq[, options]]])

obj <Object> 要序列化为 URL 查询字符串的对象。

sep <string> 用于在查询字符串中分隔键值对的子字符串。默认值: '&'。

eq <string> 用于在查询字符串中分隔键和值的子字符串。默认值: '='。

options

(七)Buffer模块

一个类似于Array对象,用于表示固定长度的字节序列,换句话说,Buffer就是一段固定长度的内存空间,用于处理二进制数据。

特点:

1、Buffer大小固定且无法调整

2、Buffer性能较好,可以直接对计算机内存进行操作

3、每个元素大小为1字节(Byte)

Buffer的创建:

1、alloc

const buf1 = Buffer.alloc(10);

let buf1 = Buffer.alloc(10);
console.log(buf1)

<Buffer 00 00 00 00 00 00 00 00 00 00>

2、allocUnsafe

创建速度快,不清除原有数据.

const buf3 = Buffer.allocUnsafe(10);

const buf3 = Buffer.allocUnsafe(10);
console.log(buf3)

<Buffer 00 00 00 00 00 00 00 00 00 00>

3、from

const buf3 = Buffer.from("Hello");
console.log(buf3)

<Buffer 48 65 6c 6c 6f>

Buffer与字符串的转换:

const buf3 = Buffer.from("Hello");
console.log(buf3[0])//对H以十进制输出
console.log(buf3[0].toString(2))//对H以十进制转换成二进制

(八)fs模块(重点)

file system模块

fs模块可以实现与硬盘的交互,例如:文件的创建、删除、重命名、移动,还有文件内容的写入与读取,以及文件夹的相关操作。

1、读、写文件

//导入fs模块
const fs=require('fs');

//2\写入文件
fs.writeFile('座右铭.txt','三人行,必有我师焉',err =>{
    //err  写入成功:null  写入失败:错误对象
    if(err){
        console.log("写入失败");
        return;
    }
    console.log("写入成功");
});

 writeFil是异步写入,writeFileSync是同步写入

扩展:

fs.readFile('data.txt',function (err,data) {
      console.log(data) //console.log(data.toString( ))
})
fs.writeFile('./b.txt',data,function (err) {
    if (err){
        console.log(err);
    }else{
        console.log('success')
    }
});

2、追加写入

fs.appendFile('data.txt',data,function (err) {
    console.log(err);
})

3、流式写入 

文件写入场景:

4、文件读取

//导入fs模块
const fs=require('fs');

//异步读取
fs.readFile('座右铭.txt',(err,data)=>{
    if(err){
        console.log("读取失败");
        return;
    }
    console.log(data.toString());
})

//同步读取
let data=fs.readFileSync('座右铭.txt')
console.log(data.toString());
fs.readFile('data.txt',function (err,data) {
      console.log(data) //console.log(data.toString( ))
})

读取文件常用场景:

流式读取:

//导入fs模块
const fs=require('fs');

//创建读取流对象
const rs = fs.createReadStream('座右铭.txt');
//绑定data事件  chunk块、大块
rs.on('data',chunk=>{
    console.log(chunk.length);//输出是字节大小,对应64KB
    console.log(chunk.toString())
})

//end可选事件
rs.on('end',()=>{
    console.log('读取完成')
})

 

5、文件删除:

fs.unlink('./b.txt',function (err) {
    if (err){
        throw err;
    }else{
        console.log('delete success')
    }
})

还有 rm 方法删除文件,用法同上

6、文件重命名:

 重命名:

//导入fs模块
const fs=require('fs');

//调用rename方法
fs.rename('座右铭.txt','论语.txt',err=>{
    if(err){
    console.log("失败")
    return ;
}
console.log("成功")
});

8、文件目录操作:

fs.mkdir('./test',function (err) {
    console.log(err);
})
//rmdir只能删除空文件夹
fs.rmdir('./file',function (err) {
    if (err){
        console.log('fail')
    }else{
        console.log('success')
    }
})

 

递归创建:

//导入fs模块
const fs=require('fs');

//递归创建
fs.mkdir('./a/b/c',{recursive:true},err=>{
     if(err){
    console.log("失败")
    return ;
}
console.log("成功")
})

读取文件夹:

const fs=require('fs');
//同步读取文件
let dir=fs.readdirSync('./');
console.log(dir);  //返回数组 读取当前目录下的信息

//错误的回调优先,在回调函数中第一个参数表示错误对象 默认null
fs.readdir('./a',function (err,data) {
    if (err){
        console.log('读取错误');
    }else{
        console.log(data)
    }
})

9、文件的复制:(获取数据,再写入)

//导入fs模块
const fs=require('fs');

//方式一:readFile
let data=fs.readFileSync('座右铭.txt');
//写入文件
fs.writeFileSync('座右铭2.txt',data)


//方式二:流式操作
//创建读取流对象
const rs = fs.createReadStream('座右铭.txt');
const ws = fs.createWriteStream('座右铭3.txt');

//绑定data事件
rs.on('data',chunk=>{
    ws.write(chunk);
})

 流式读取所占内存更小,更推荐

10、查看资源状态 :

 结果值对象结构:

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isFIFO()
stats.isSocket()

11、fs路径:

12、__dirname(相当于全局变量) 

9、path模块

//导入path模块
const path=require('path');
//resolve
console.log(path.resolve(__dirname,'01.js'))

结果:

d:\Demo\NodeDemo\01.js

//导入path模块
const path=require('path');

//parse 方法   __filename和__dirname类似于全局变量,__filename保存文件的绝对路径
console.log(__filename);
let str ='d:\\Demo\\NodeDemo\\01.js'
console.log(path.parse(str))

扩展:

自动化更新代码--页面

在控制台:npm init -y

生成

npm i vue -S

生成:node_modules文件夹 

进入当前目录

cd xxx

nodemon  你的文件 

几种包安装的方式:

npm install moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 不会将模块依赖写入devDependencies或dependencies 节点。
  3. 运行 npm install 初始化项目时不会下载模块。

npm install -g moduleName 命令

  1. 安装模块到全局,不会在项目node_modules目录中保存模块包。
  2. 不会将模块依赖写入devDependencies或dependencies 节点。
  3. 运行 npm install 初始化项目时不会下载模块。

npm install -save moduleName 命令 => -S

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入dependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install --production或者注明NODE_ENV变量值为production时,会自动下载模块到node_modules目录中。

npm install -save-dev moduleName 命令 => -D

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入devDependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install --production或者注明NODE_ENV变量值为production时,不会自动下载模块到node_modules目录中。

总结

devDependencies 节点下的模块是我们在开发时需要用的,比如项目中使用的 gulp ,压缩css、js的模块。这些模块在我们的项目部署后是不需要的,所以我们可以使用 -save-dev 的形式安装。
像 express 这些模块是项目运行必备的,应该安装在 dependencies 节点下,所以我们应该使用 -save 的形式安装。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值