Node.js入门笔记(包含源代码)以及详细解析
Node.js 入门笔记源码
01、如何在终端中执行js 文件
目标:将下面的代码语句在中断中执行
- 代码演示:
`console.log('Hello World')for (let i = 0;i < 3;i++) {console.log(6)}`
- 方法:在文件上右击打开在终端中执行,然后输入node空格 输入需要执行的文件名字
02、基于 fs 模块读写文件内容
目标:使用fs模代码操作文件在终端中的读写操作
+ 1、加载 fs 模块对象
- 2、写入文件内容-----》writeFile文件中没有文件会自动帮我们创建
- 3、读取文件
- 代码演示:
@@
// 1、加载 fs 模块对象 const fs = require('fs')// 2、写入文件内容// 2.1:test.txt为文件路径名字// 2.2:写入的内容// 2.3:回调函数,返回错误打印出来, 否则成功 fs.writeFile('test.txt','Hello World',(err) => {if(err) console.log(err)else console.log('写入成功') })// 3、读取文件 fs.readFile('test.txt',(err,data) => {if (err) console.log(err)// else console.log(data) //<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>else console.log(data.toString()) //toString() 转为字符串形式 })
-
执行结果为:
写入成功
Hello World
03、path模块-路径问题
问题: Node.js代码中,相对路径是根据终端所在路径在查找的,可能无法找到你想要的文件
因此,建议在Node.js代码中,使用绝对路径(也就是需要在终端执行的代码内容)
__dirname 内置变量 (动态获取当前模块目录-绝对路径)
**path.join()**会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连接在一起
语法:1.加载path模块
2.使用path.join(__dirname, 目标文件的路径)方法,拼接路径
- 代码演示
- 错误例子
//1、 引入 fs 模块 通过终端读取文件内容
// const fs = require('fs')
// fs.readFile('test.txt',(err,data) => {
// if (err) console.log(err)
// else console.log(data.toString()) //执行成功,将十六进制转换为字符串形式返回结果
// })
// 这里使用相对路径就发生报错error
- 正确示例
- path.join()方法里面,第一个参数就是__dirname 当前所在文件的文件夹地址(终端的位置) ,第二个就是目标文件的路径
// 2、解决方式:只有采用绝对路径// 1、引入 fs 模块const fs = require('fs')// 2、引入 path 模块对象const path = require('path')// 3、调用path.join()方法 配合 __dirname 组成目标文件的绝对路径console.log(__dirname)fs.readFile(path.join(__dirname,'../test.txt'),(err,data) => {if (err) console.log(err)else console.log(data.toString())})
04、基于node.js 压缩前端文件
- 目标:把回车符(\r) 和 换行符(\n)去掉后,写入到新html文件中。
实现方法:
读取源html文件内容
- 源html文件 === (public文件夹下面的index.html文件) 未经过压缩的源代码
正则替换字符串
写入到新的html文件中
- 新的html文件 === (dist文件夹下面的index.html文件) 经过node使用正则压缩后的代码
// 读取public文件夹里面的前端源代码
// 1.引入读取模块fs
const fs = require('fs')
// 2.拼接路径获取绝对路径
const path = require('path')
// 3、 __dirname当前文件夹所在的地址 进行查找文件
fs.readFile(path.join(__dirname,'public/index.html'),(err,data) => {if (err) console.log(err)else {// 4、将返回的内容转为字符串显示const htmlStr = data.toString()// 5、进行字符串替换 正则查找全局// replace()是一个字符串方法,用于将指定的字符或子串替换为新的字符或子串。const resultStr = htmlStr.replace(/[\r\n]/g,'')console.log(resultStr)// 6、写入到新的 html 文件中fs.writeFile(path.join(__dirname,'dist/index.html'),resultStr,err => {}) //writeFile文件中没有文件会自动帮我们创建if (err) console.log(err)else {console.log('写入成功')}}
})
05、URL中的端口号
1.URL:简称网址,用于访问服务器里的资源
2. http://hmajax.itheima.net:80/api/province ==> 这里面:80就是 端口号
3.端口号范围:0~65535之间的任意整数 端口号默认为:80(注意1023之前的端口号是特定的被系统占用不可使用)
06、http模块-创建Web服务
实现步骤:
1、加载http模块,创建Web服务对象
2、监听require请求事件,设置响应头和响应体
3、配置端口号并启动Web服务
4、浏览器请求 http://localhost:3000则是我们的创建的web服务对象
- 代码示例
// 1、加载http模块,创建Web服务对象
const http = require('http')
const server = http.createServer()//调用http里面的方法
// 2、监听require请求事件,设置响应头和响应体
server.on('request',(req,res) => {// 设置响应头-内容类型-普通文本以及中文编码格式res.setHeader('Content-Type','text/plain;charset=utf-8') //这里都是固定的内容类型// 设置响应体内容,结束本次请求与相应res.end('欢迎使用 Node.js 和 http 模块创建的 Web服务')
})// 3、配置端口号并启动Web服务
server.listen(3000,() => {console.log('Web 服务启动成功了')
})
代码详细说明
这段代码是使用Node.js的http模块创建一个简单的Web服务,以下是对代码的逐行解释:
- 第一行代码
const http = require('http'),加载了Node.js的http模块,并将其赋值给变量http,以便后续使用该模块提供的功能。- 第二行代码
const server = http.createServer(),调用http模块中的createServer()方法创建一个HTTP服务器对象,并将其赋值给变量server。此时的服务器对象还没有进行具体的请求处理配置。- 第四行代码
server.on('request', (req, res) => { ... }),通过server对象的on方法监听request事件,该事件会在有客户端请求到达服务器时触发。回调函数接收两个参数:req表示请求对象,res表示响应对象。- 在回调函数中,通过
res.setHeader('Content-Type', 'text/plain;charset=utf-8')设置响应头,将内容类型设为普通文本以及中文编码格式。- 接着,通过
res.end('欢迎使用 Node.js 和 http 模块创建的 Web服务')设置响应体内容,并结束本次请求与相应。- 最后一行代码
server.listen(3000, () => { ... }),通过server对象的listen方法配置服务器监听的端口号为3000,并启动Web服务。当服务器成功启动后,回调函数会被执行,输出一条信息表示服务器启动成功。综上,这段代码创建了一个简单的Web服务,监听在本地主机的3000端口上。当有请求到达时,会返回固定的欢迎消息。你可以通过访问
http://localhost:3000来查看Web服务的响应。
07、基于Web服务,开发提供网页资源的功能
基于Web服务,开发提供网页资源的功能
- 目标:基于 Web 服务,开发提供网页资源的功能
- 步骤:
- 基于 http 模块,创建 Web 服务
- 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
- 其他路径,暂时返回不存在提示
- 运行 Web 服务,用浏览器发起请求
- 代码示例
// 1. 基于 http 模块,创建 Web 服务
const fs = require('fs')
const path = require('path')
const http = require('http')
const server = http.createServer()
server.on('request',(req,res) => { //req为代表客户端发送的HTTP请求对象。res为代表服务端发送的HTTP响应对象// 2、使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方if (req.url === '/index.html') {fs.readFile(path.join(__dirname,'dist/index.html'),(err,data) => {if (err) console.log(err)else {// 设置响应内容的类型为html超文本字符串 ,让浏览器解析成标签网页等res.setHeader('Content-Type','text/html;charset=utf-8')res.end(data.toString())}})} else {// 3. 其他路径,暂时返回不存在提示res.setHeader('Content-Type','text/html;charset=utf-8')res.end('你要访问的资源路径不存在')}})
server.listen(8080,() => {console.log('Web 服务启动成功')
})
《代码解析》
这段代码的详细原理如下:
- 首先,引入了
http、fs和path模块,并通过http.createServer()创建了一个HTTP服务器对象,并将其赋值给server变量。同时,使用server.on('request', (req, res) => { ... })监听request事件,传入回调函数处理请求。- 在回调函数中,首先通过
req.url获取到客户端请求的资源路径。如果资源路径为/index.html,则进入条件判断块。- 在条件判断块中,使用
fs.readFile()方法读取指定路径下的index.html文件内容。其中,通过path.join(__dirname, 'dist/index.html')构建出index.html的完整路径。在回调函数中,判断是否有读取错误,若有错误则输出错误信息;若没有错误,则设置响应头的Content-Type为text/html;charset=utf-8,表示响应内容类型为HTML文档,然后通过res.end(data.toString())将读取到的文件内容作为响应体发送给客户端。- 如果资源路径不是
/index.html,则执行默认的else分支,设置响应头的Content-Type为text/html;charset=utf-8,并通过res.end('你要访问的资源路径不存在')返回一个提示消息给客户端。- 最后,通过
server.listen(8080, () => { ... })配置服务器监听的端口号为8080,并在服务器成功启动后输出一条提示信息。总结来说,这段代码创建了一个简单的HTTP服务器,当客户端请求的资源路径为
/index.html时,会读取指定路径下的index.html文件内容并返回给客户端,否则返回一个资源不存在的提示消息。通过监听request事件和处理回调函数,实现了对不同请求路径的处理和响应。最后,通过server.listen()方法指定监听的端口号,并在服务器成功启动后输出启动成功的提示信息。
关于request监听函数中的req和res的详细解释
在Node.js的http模块中,
req和res是通常用于表示HTTP请求对象和HTTP响应对象的变量名。
req(或者常见的缩写)是request的缩写,代表客户端发送的HTTP请求对象。它包含了与请求相关的各种信息,如请求方法、URL、请求头、请求参数等。通过req对象,我们可以获取和解析客户端发送的请求数据,以便在服务器端进行处理和响应。res(或者常见的缩写)是response的缩写,代表服务端发送的HTTP响应对象。它用于设置和发送服务端的响应给客户端。通过res对象,我们可以设置响应的状态码、响应头、响应体内容等。最终,将响应发送给客户端,完成HTTP请求-响应周期。在HTTP请求过程中,客户端发送请求给服务器,服务器接收到请求后创建一个
req对象来表示该请求。然后,服务器处理请求并生成相应的内容,将其存放在一个res对象中,并通过网络将res对象发送给客户端。所以,
req和res分别代表了客户端发送的HTTP请求对象和服务端返回的HTTP响应对象,在开发Web应用时,我们可以使用这两个对象来实现对请求的处理和对响应的配置。
相关文章:
Node.js入门笔记(包含源代码)以及详细解析
Node.js 入门笔记源码 01、如何在终端中执行js 文件 目标:将下面的代码语句在中断中执行 代码演示: console.log(Hello World)for (let i 0;i < 3;i) {console.log(6)}方法:在文件上右击打开在终端中执行,然后输入node空格 输…...
windows自动化点击大麦app抢购、捡漏,仅支持windows11操作系统
文章目录 必要条件程序运行必要条件 确保windows11版本操作系统,如果不是可以通过镜像升级为windows11如果已经是windows11操作系统,确保更新到最新版本 修改系统所在时区,将国家或地区改为美国 开启虚拟化 勾选Hyper-V,如果没有则不需要勾选 勾选虚拟机平台 勾选完毕,点…...
vue 拦截 v-html 中 a 标签 href 跳转
记录 template 中 给需要 拦截的 代码片段加上click 方法 click“targetNodeNameClick” <p class"message-content message-content-text" v-html"replaceURLWithHTMLLinks(getText(message))" click"targetNodeNameClick"></p>然…...
分布式id、系统id、业务id以及主键之间的关系
推荐 连分布式ID都理解不了,你是刚培训出来冒充面试官的吧 1 分布式id、系统id、业务id以及主键之间的关系 分布式ID、系统ID、业务ID和主键的关系: 分布式ID:在分布式系统中,由于存在多个独立的节点,为了保证每个节…...
设计模式七:适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口能够协同工作。 适配器模式涉及角色: 目标接口(Target Interface):…...
数据结构---队列
(一)队列之基础补充 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 —— 百科 「队列 Queue」是一种…...
chatGPT在软件测试中应用方式有哪些?
ChatGPT可以在软件测试中以以下方式应用: 1. 自动化对话测试:ChatGPT可以用于自动化对话测试,模拟用户与软件系统进行实时对话。它可以扮演用户的角色,向系统发送各种类型的指令和请求,并验证系统的响应是否符合预期。…...
chatgpt 接口使用(一)
使用api实现功能 参考链接:https://platform.openai.com/examples 安装库: pip3 install openai 例如: import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…...
【个人笔记】Linux 服务管理两种方式service和systemctl
service命令与systemctl 命令 service 命令与传统的 SysVinit 和 Upstart 初始化系统相关。较早期的 Linux 发行版(如早期的 Ubuntu、Red Hat 等)使用了这些初始化系统。service 命令用于启动、停止、重启和查询系统服务的状态。虽然许多现代 Linux 发行…...
HCIP中期考试实验
考试需求 1、该拓扑为公司网络,其中包括公司总部、公司分部以及公司骨干网,不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名,并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中,运行OSPF协议或者BGP…...
【WebRTC---源码篇】(二十二)WebRTC的混音处理
音频混音主力 音频混音主体主要通过(重采样) + (混音)为主 音频重采样 内容实现是在webrtc::voe中实现的,下面来对重采样全流程逐一分析 。 void RemixAndResample(const AudioFrame& src_frame,//源音频数据帧PushResampler<int16_t>* resampler,//重采样对…...
MTK system_server 卡死导致手机重启案例分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、MTK AEE Log分析工具二、AEE Log分析流程三、system_server 卡死案例分析及解决 本文主要针对 Exception Type: system_server_watchdog , system_…...
加强 Kubernetes 能力:利用 CRD 定义多版本资源的实现方式
姚灿武,Rancher 中国研发工程师,拥有 7 年云计算领域经验,热衷开源技术,在云原生相关技术领域拥有丰富的开发和实践经验。 CRD,即自定义资源定义(Custom Resource Definition),是 Ku…...
区块链应用 DApp 开发需要掌握的技能
文章目录 前言为什么要开发 DAppDApp 的优势DApp 应用范围DApp 开发者技能 前言 前面区块链系列的文章中介绍了区块链技术、智能合约、web3js,Solidity 编程语言,在开发者的角度就是要基于这些知识在Web3时代去开发一个 DApp(去中心化应用程…...
关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题
由于一段时间没有使用Selenium,当再次使用时发现之前写的Selenium元素定位的代码运行之后会报错,发现是Selenium更新到新版本(4.x版本)后,以前的一些常用的代码的语法发生了改变,当然如果没有更新过或是下载…...
c++通过自然语言处理技术分析语音信号音高
对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。 通常情况下,人的声音基频范围是85Hz到255Hz。根据语音信号的基频可以推断出其音高。 C中可以使用数字信号处理库或语音处理库…...
[pymc3][python]pymc3安装后测试代码2
测试环境: pymc33.11.2 代码: import numpy as np import pymc3 as pm import matplotlib.pyplot as pltif __name__ __main__:# 生成随机数据np.random.seed(123)x np.linspace(0, 1, 100)y 0.5 * x np.random.normal(0, 0.1, size100)# 定义概率…...
Go语言time库,时间和日期相关的操作方法
time库 用于处理时间、日期和时区的核心库。在实际开发中,常常需要与时间打交道,例如记录日志、处理时间差、计算时间间隔等等。因此,掌握time库的使用方法对于Go开发者来说非常重要。 在Go语言中,时间表示为time.Time类型&…...
JVM总结笔记
JVM JVM是什么?JVM 的主要组成部分JVM工作流程JVM内存模型直接内存与堆内存的区别:堆栈的区别Java会存在内存泄漏吗?简述Java垃圾回收机制垃圾收集算法轻GC(Minor GC)和重GC(Full GC)新生代gc流程JVM优化与JVM调优 JVM是什么? JVM是Java Virtual Mach…...
C++ 缓存再排序,解决多线程处理后的乱序问题,不知道思路对不对[挠下巴]
C 缓存再排序,解决多线程处理后的乱序问题,不知道思路对不对[挠下巴] 使用map默认会根据key排序的原理作缓存,队列满了依次推出,抛弃掉过时的数据 #include <functional> #include <iostream> #include <map> #…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
