Node.js--》三大常见模块的使用讲解

news2025/1/13 2:43:05

目录

fs文件系统模块

fs.readFile()方法

fs.writeFile()方法

readFile与writeFile的使用

fs模块路径动态拼接问题

path路径模块

path.join()方法

path.basename()

path.extname()

path.parse()

http模块

req请求对象

res响应对象

解决中文乱码问题

响应不同内容


fs文件系统模块

fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

fs.readFile()方法

用来读取指定文件中的内容。其语法格式如下:

fs.readFile(path[,options],callback)

参数1:必选参数,字符串,表示文件路径。

参数2:可选参数,表示以什么编码格式来读取文件。

参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

// 导入fs模块,来操作文件
const fs = require('fs')

// 调用 fs.readFile() 方法来读取文件
fs.readFile('./1.txt','utf-8',function(err,dataStr){
  // 读取失败执行err,打印的结果为报错的结果
  console.log(err);
  console.log('----------');
  // 读取成功执行dataStr,dataStr就是读取的内容,失败的结果为null
  console.log(dataStr);
}) 

当然我们也可以写一个if语句判断文件是否读取成功,如下:

const fs = require('fs')

fs.readFile('./11.txt','utf-8',function(err,dataStr){
  // 如果err为true说明文件读取失败,只有err为null的时候读取文件才会成功
  if(err){
    console.log('读取文件失败:'+err.message);
  }else{
    console.log('读取文件成功:'+dataStr);
  }
})

fs.writeFile()方法

用来向指定的文件中覆盖写入内容。其语法格式如下:

fs.writeFile(file,data[,options],callback)

参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。

参数2:必选参数,表示要写入的内容。

参数3:可选参数,表示以什么格式写入文件内容,默认值是utf-8

参数4:必选参数,文件写入完成后的回调函数

const fs = require('fs')

fs.writeFile('./1.txt','hello Node.js','utf-8',function(err){
  // 如果文件写入成功,则 err 的值等于 null
  // 如果文件写入失败,则 err 的值等于一个错误对象
  console.log(err);
})

当然我们也可以写一个if语句判断文件是否写入成功,如下:

const fs = require('fs')

fs.writeFile('./1.txt','hello Node.js','utf-8',function(err){
  if(err){
    console.log('文件写入失败:'+err.message);
  }else{
    console.log('文件写入成功!');
  }
})

readFile与writeFile的使用

const fs = require('fs')
// 文件读取
fs.readFile('./1.txt','utf-8',function(err,dataStr){
  if(err){
    console.log('读取文件失败:'+err.message);
  }else{
    // 将文件以换行回车的形式拼接为一个数组
    const Str = dataStr.split('\r\n')
    const newStr = []
    Str.forEach((item)=>{
      // 将原数组中每一项的=替换成:在拼接到新数组中
      newStr.push(item.replace('=',':'))
    })
    // 将新数组中的每一项以回车换行的形式进行合并,得到一个新数组
    const updateStr =  newStr.join('\r\n')
    // 调用 fs.writeFile() 方法,把处理的文件再写入进入
    fs.writeFile('./1.txt',updateStr,'utf-8',function(err){
      if(err){
        console.log('写入文件失败:'+err.message);
      }else{
        console.log('写入文件成功!!');
      }
    })
  }
})

fs模块路径动态拼接问题

在使用fs模块时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题原因是在代码运行时,会以执行node命令时所处的目录,动态拼接出被操作文件的完整目录。解决方案是在使用fs模块操作文件时,直接提供完整路径,不要提供 ./ 或 ../ 开头的相对路径,从而避免路径动态拼接的问题。如下:

const fs = require('fs')

// 不要使用 ./ 或 ../ 开头的相对路径
fs.readFile('./1.txt','utf-8',function(err,dataStr){
  if(err) console.log('读取文件失败:'+err.message);
  console.log('读取文件成功:'+'\n'+dataStr);
})

// __dirname 表示当前文件所处的目录
fs.readFile(__dirname+'/1.txt','utf-8',function(err,dataStr){
  if(err) console.log('读取文件失败:'+err.message);
  console.log('读取文件成功:'+'\n'+dataStr);
})

path路径模块

path路径模块的方法有很多,博主只是举例最常见的模块,如果有想更深一步了解的朋友可以翻阅Node.js 对path路径模块讲解的官方文档:path路径模块官方文档

path模块是Node.js官方提供的,用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求。

path.join()方法

用来将多个路径片段拼接成一个完整的路径字符串。示例代码如下:

const path = require('path')
const fs = require('fs')
// 注意:../ 会抵消前面的路径
const pathStr = path.join('/a','/b/c','../','/d','e')
console.log(pathStr); // \a\b\d\e

// 使用fs模块进行读取文件时,使用path模块拼接路径
fs.readFile(path.join(__dirname,'/1.txt'),'utf-8',function(err,dataStr){
  if(err) console.log('文件读取失败:'+err.message);
  console.log('文件读取成功:'+dataStr);
})

path.basename()

用来从路径字符串中,将文件名解析出来,获取到文件的名称部分,示例代码如下:

const path = require('path')
const fpath = '/a/b/c/index.html'

var fullName = path.basename(fpath)
console.log(fullName); // index.html

// 第二个参数会将 .html 后缀名进行移除
var nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt);

path.extname()

用来获取路径中的扩展名部分,示例代码如下:

const path = require('path')
const fpath = '/a/b/c/index.html'

var fext = path.extname(fpath)
console.log(fext); // .html

path.parse()

用来获取当前文件的所有内容(包括所在盘符、所在路径、文件名后缀)

http模块

http模块是Node.js官方提供的,用来创建web服务器的模块。通过 http 模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web服务资源。

客户端:在网络节点中,负责消费资源的电脑。

服务器:负责对外提供网络资源的电脑。与客户端的区别是服务器上装载了web服务器软件,例如:IIS、Apache等。

在Node.js中,,我们不需要使用IIS或Apache等这些第三方的web服务器软件。因为我们可以基于Node.js提供的http模块,通过几行简单的代码手写一个服务器软件,从而对外提供web服务。

// 1、导入 http 模块
const http = require('http')
// 2、创建 web 服务器实例
const server = http.createServer()
// 3、为web服务器绑定 request 事件,监听客户端请求
server.on('request',function(req,res){
  console.log('Someone visit our web server');
})
// 4、启动服务器
server.listen(8080,function(){
  console.log('server running at http://127.0.0.1:8080');
})

req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。如果想在事件处理函数中访问与客户端相关的数据或属性,可以通过以下方式:

const http = require('http')
const server = http.createServer()
// req是请求对象,它包含了与客户端相关的数据和属性
server.on('request',(req,res)=>{
  // req.url是客户端请求的url地址
  const url = req.url
  // req.methods是客户端请求的 methods 类型
  const method = req.method
  const str = `Your request url is ${url},and request method is ${method}`
  console.log(str);
})
// 4、启动服务器
server.listen(8080,function(){
  console.log('server running at http://127.0.0.1:8080');
})

res响应对象

在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性,可以用如下方式:

const http = require('http')
const server = http.createServer()
// req是请求对象,它包含了与客户端相关的数据和属性
server.on('request',(req,res)=>{
  // req.url是客户端请求的url地址
  const url = req.url
  // req.methods是客户端请求的 methods 类型
  const method = req.method
  const str = `Your request url is ${url},and request method is ${method}`
  console.log(str);
  // 调用 res.end() 方法,向客户端响应一些内容
  res.end(str)
})
// 4、启动服务器
server.listen(8080,function(){
  console.log('server running at http://127.0.0.1:8080');
})

解决中文乱码问题

当调用 res.end()方法,向客户端发送中文内容时,会出现乱码问题,此时需要手动设置内容的编码格式,如下:

const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
  // 定义一个中文字符串,包含中文内容
  const str = `您请求的 URL 地址是 ${req.url},请求的 method 类型是 ${req.method}`
  // 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码问题
  res.setHeader('Content-Type','text/html; charset=utf-8')
  // res.end() 将内容响应给服务器
  res.end(str)
})
server.listen('8080',()=>{
  console.log('server running at http://127.0.0.1:8080');
})

响应不同内容

我们要实现根据访问的url路径来向页面去响应不同的内容。

const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
  // 获取请求的url地址
  const url = req.url
  // 设置默认响应内容为 404 Not found 
  let content = '<h1>404 Not found</h1>'
  // 判断用户访问的界面来返回不同的结果
  if(url==='/' || url==='/index.html'){
    content = '<h1>首页</h1>'
  }else if(url === '/about.html'){
    content = '<h1>关于页面</h1>'
  }
  // 设置中文编码
  res.setHeader('content-Type','text/html; charset=utf-8')
  // 使用res.end()方法把内容响应到客户端
  res.end(content)
})
server.listen('8080',()=>{
  console.log('server running at http://127.0.0.1:8080');
})

还是重复一点,如果想更深一步的去了解,还是推荐看Node.js的官方文档,里面的所有内容都涵盖了,可以结合相关博主文章去一一印证:官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现猎人猎物优化算法(HPO)优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的优…

计算机系统基础实验 - 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示

实验3 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 实验序号&#xff1a;3 实验名称&#xff1a;同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 适用专业&#xff1a;软件工程 学 时 数&#xff1a;2学时 一、实验目的 1.掌握定点数乘法溢出的判定方法…

Kafka触发Rebalance的场景分析

文章目录前言触发Rebalance的原因1. 消费者成员发生变化2. 分区数发生变化3. 订阅Topic发生变化Rebalance全流程介绍场景一&#xff1a;新成员入组场景二&#xff1a;成员主动离组场景三&#xff1a;成员崩溃离组场景四&#xff1a;组成员提交位移前言 所谓Rebalance就是让Con…

Python小工具-复制嵌套目录下的多个word文档到指定目录

文章目录Python小工具-复制嵌套目录下的多个word文档到指定目录需求原始数据工具实现思路代码实现1-6 配置项目7 定义file_type_to_reduce_dir函数完成文件复制或移动8 定义list_dir_by_level函数完成遍历调用函数并执行待改进地方完整代码自我反省Python小工具-复制嵌套目录下…

全志 Linux 系统启动优化 启动优化速度方式 优化启动流程 优化uboot 优化kernel等

文章目录1 概述2 启动速度优化简介2.1 启动流程2.2 测量方法2.2.1 printk time2.2.2 initcall_debug2.2.3 bootgraph.2.2.4 bootchart2.2.5 gpio 示波器.2.2.6 grabserial.2.3 优化方法2.3.1 boot0启动优化2.3.1.1 非安全启动.2.3.1.2 安全启动2.3.2 uboot启动优化2.3.2.1 完全…

07、SpringCloud 系列:Alibaba - 介绍

SpringCloud 系列列表&#xff1a; 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

一套ASP.NET优惠券领取微信小程序源码(前台+后台)

ASP.NET优惠券领取微信小程序源码&#xff08;前台后台&#xff09; 源码免费分享&#xff01;需要源码学习可私信我。 一、源码特点 1、这是一个微信小程序对接淘宝的淘宝客api自助搜索优惠券领取程序&#xff0c;简单易学。 2、后台采用asp.netMvc框架开发、实现了调用阿里妈…

Java I/O(五)NIO应用之Netty

Netty 目录Netty1 Netty概览2 Netty核心组件2.1 Bootstrap和ServerBootStrap&#xff08;启动引导类&#xff09;2.2 Channel&#xff08;网络操作抽象类&#xff09;2.3 EventLoop&#xff08;事件循环&#xff09;2.4 EventLoopGroup&#xff08;事件循环组&#xff09;2.7 C…

【Vue】创建 Vue 实例与对象配置、容器与实例的关系、插值延伸和 Vue 开发工具的初步使用

创建 Vue 实例 引入 Vue 注意在 Head 中 <script type"text/javascript" src"./vue.js"></script>另一个 javascript 中创建 Vue 实例&#xff0c;注意在 Body 尾部 <script type"text/javascript">const x new Vue() <…

12. 目前常用的四种信道复用方式:()、()、()和() ---- 计算机网络

目前常用的四种信道服用方式&#xff1a;&#xff08;频分复用&#xff09;、&#xff08;时分复用&#xff09;、&#xff08;码分复用&#xff09;和&#xff08;波分复用&#xff09; 知识点 复用&#xff08;multiplexing&#xff09;&#xff1a;就是在一个信道上传输多路…

java SE阶段面试题

目录 1、Java 的数据类型有哪些&#xff1f; 2、变量的三要素是什么&#xff1f;变量使用有什么要求&#xff1f; 3、基本数据类型变量和引用数据类型变量有什么区别&#xff1f; 4、Java 的运算符有几种意思&#xff1f; 5、Java 的自增、自减运算符在自增变量前后有什么区…

《计算机网络》——第三章知识点

第三章思维导图 链路层的信道类型 一对一:点对点信道 —对多:广播信道 链路层要解决的问题 封装成帧 透明传输 差错检测密封&#xff0c;透气性差 封装成帧就是在一段数据的前后部分添加首部和尾部&#xff0c;这样就构成了一个帧。接收端在收到物理层上交的比特流后&#xff…

Pandas.to_csv()函数及全部参数使用方法一文详解+实例代码

目录 前言 一、基础语法与功能 二、参数说明和代码演示 1.path_or_buf 选择文件/文件路径写入 2.sep 指定分隔符 3.na_rep 指定缺少数据表示 4.float_format 指定浮点型字符串输出格式 5. columns 指定要写入的列 6.header 是否需要写入列名 7.index 是否写入行名称&am…

【实时数仓】Sugar拉取数据展示、品牌销售排行接口、品类销售占比接口和热门商品SPU排名接口的实现

文章目录一 Sugar拉取数据展示1 内网穿透&#xff08;1&#xff09;作用&#xff08;2&#xff09;工具&#xff08;3&#xff09;本机ip地址&#xff08;4&#xff09;花生壳配置2 配置组件二 品牌销售排行接口1 Sugar配置&#xff08;1&#xff09;图表配置&#xff08;2&…

2022《粤语好声音-乐队风暴》全国总决赛圆满收官!

2022年12月17日&#xff0c;由广东珠江、盛娱星汇海选联合主办的2022《粤语好声音-乐队风暴》全国总决赛在广州增城1978电影小镇正式拉开帷幕。从海选到全国总决赛&#xff0c;2022《粤语好声音-乐队风暴》在21座城市中&#xff0c;通过线上线下双模式开展&#xff0c;历时6个月…

OpManager 虚拟化管理

什么是虚拟化 虚拟化是创建计算资源的虚拟形式&#xff0c;如计算机、服务器或其他硬件组件&#xff0c;或基于软件的资源&#xff08;如操作系统&#xff09;。虚拟化最常见的示例是在操作系统安装期间对硬盘进行分区&#xff0c;其中物理硬盘驱动器被拆分为多个逻辑磁盘以提…

重点 |中级软件设计师易混淆知识点 (1)

本文章总结了软件设计师考试易混淆知识点&#xff01;&#xff01;&#xff01; 帮助大家更好的复习&#xff0c;希望能对大家有所帮助 比较长&#xff0c;放了部分&#xff0c;需要可私信&#xff01;&#xff01; 易混淆点1&#xff1a;原、反、补码的运算 1、原码&#x…

Технокубок 2021 - Финал C. Basic Diplomacy

翻译&#xff1a; Aleksey有&#x1d45b;个朋友。他现在也在度假&#xff0c;所以他有&#x1d45a;天来玩这款新的病毒式合作游戏!但由于它是合作的&#xff0c;阿列克谢将需要一个队友在每个&#x1d45a;天。 在这些日子里&#xff0c;每天都有一些朋友可以玩&#xff0c…

Spring 依赖注入

文章目录流程图依赖注入的方式手动注入自动注入XML的autowire自动注入autowire BY_NAME 与 BY_TYPE(已过时)执行时机&#xff1a;AUTOWIRE_BY_NAMEAUTOWIRE_BY_TYPEAutowired注解的处理(含Value&#xff0c;Inject)AutowiredAnnotationBeanPostProcessorresolveDependencyfindA…

机器学习——线性模型学习

线性回归 主要目标确定 如何确定w和b呢&#xff1f;关键在于如何衡量f(x)与y的差别 此种衡量误差的方法称为均方误差也称为欧式距离 求解w和b使上述方程最小化的过程称为线性回归模型的最小二乘”参数估计“ 多元线性回归 针对多个属性的数据集D&#xff0c;此时试图学得 …