Node一、fs 模块、path 模块、端口号、 http 模块、

一、Node.js了解

Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序。
概念:使用 Node.js 编写后端程序 / 支持前端工程化
后端程序:提供接口和数据,网页资源等
前端工程化 对代码压缩,转译,整合(使用各种工具,提升效率)
Node.js与浏览器环境的JS最大区别:

Node.js 环境中没有BOM和 DOM,但也是用JS 语法
Node.js 如何执行代码
在VSCode 终端中输入:nodexxxjs回车即可执行(注意路径)

1.终端

终端作用:敲击命令,调用对应程序执行

/**
 * 目标:编写 js 代码,用 node 命令执行
 * 终端作用:敲击命令,调用对应程序执行
 * 终端打开:目标文件->右键->在集成终端中打开
 * 命令:node xxx.js (注意路径)
 */
console.log(`这是js要用node执行代码`)
for (let i = 0; i < 4; i++) {

    console.log(i)

}

 二、fs 模块 - 读写文件

模块:类似插件,封装了方法/属性

fs 模块:封装了与本机文件系统进行交互的,方法/属性
语法:

1. 加载 fs 模块

const  fs = require('fs') fs 模块标识符:模块的名字

2. 写入文件内容 

fs.writeFile('写入的文件','写入的内容',回调函数(err) )
写入的数据新的替换旧的;没有这个文件则自动创建这个文件

3. 读取文件内容

fs.readFile('文件路径',回调函数(err,data))    data是读取的文件内容,Buffer数据流
获取城市列表-接口开发
/**
 * 目标:使用 fs 模块,读写文件内容
 * 语法:
 * 1. 引入 fs 模块
 * 2. 调用 writeFile 写入内容
 * 3. 调用 readFile  读取内容
 */
// 1. 引入 fs 模块
const fs = require('fs')

//fs.readFile(文件路径,回调函数(err,data))
fs.readFile('./text.txt', (err, data) => {
    if (err) {
        console.log(err)

    } else {
        // Buffer 是数据流, 因为在磁盘上读取的数据就是由二进制组成的, 我们平时看到的数据都是有编码的

        //硬盘中的文件可能是各种各样的数据:文本/视频/音频

        //读取出来的数据默认是Buffer数据流,得toString()转成字符串,用户能看懂node
        console.log(data.toString())

    }
})

// fs.writeFile(写入的文件,写入的内容,回调函数(err) )
//写入的数据新的替换旧的;没有这个文件则自动创建这个文件
fs.writeFile('./text11.txt', '我是鸿蒙6期', (err) => {
    console.log('写入成功')

})
fs.writeFile('./text.txt', '今天学习node', (err) => {


})

三、path 模块 - 路径处理

问题:Node.js 代码中,相对路径是根据终端所在路径来查找的,可能无法找到你想要的文件

由于使用的是相对路径,它相对的是命令执行的路径,而不是当前文件所在的路径

最佳解决方案:使用绝对路径

语法:

1. 加载 path 模块
const path = require('path')

2. 使用 path.join 方法,拼接路径

path.join('路径1',‘路径2',...)

path.join() 会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连接在一起

__dirname

当前文件所在的目录(绝对路径)
/**
 * 目标:读取 test.txt 文件内容
 * 注意:代码中,使用绝对路径
 * 原因:Node.js 执行时会以终端所在文件夹作为相对路径,去拼接代码中路径使用(导致找不到目标文件)
 * 解决:使用 path.join() 和 __dirname 来填写要查找的目标文件绝对地址
 */

const fs = require('fs')
const path = require('path')

// console.log(__dirname) //03.  当前js所在的位置

// __dirname 内置全局变量,表示当前文件所在的目录(绝对路径)

// 由于使用的是相对路径, 它相对的是命令执行的路径, 而不是当前文件所在的路径
// 最佳解决方案: 使用绝对路径
fs.readFile(path.join(__dirname, '..', 'text2.txt'), (err, data) => {
    if (err) console.log(err)
    else console.log(data.toString())
})

案例- 压缩前端 html+ JS

/**
 * 目标二:压缩 js 里代码,并整合到 html 中一起运行
 *  2.1 读取 public/index.js 内容
 *  2.2 使用正则替换内容字符串里的,回车符\r 换行符\n 打印语句console.log('xxx');
 *  2.3 确认后,拼接 html 内容写入到 dist/index.html 内
 */
// const fs = require('fs')
// const path = require('path')

const fs = require('fs')
const path = require('path')

// 读取html替换掉\r\n
fs.readFile(path.join(__dirname, 'public', 'index.html'), (err, data) => {

    if (err) console.log(err)
    const htmlStr = data.toString()
    const newStr = htmlStr.replace(/[\r\n]/g, '') //已经去掉\r\n的html代码
    console.log(newStr) //读取html成功

    //读js代码
    fs.readFile(path.join(__dirname, 'public/index.js'), (err, data) => {
        if (err) console.log(err)
        const myjs = data.toString() //代码→去掉\r\n;去掉1og输出→把html和js拼一起写入到新html文件

        // +所有量词默认都是贪婪模式
        // 贪婪模式: 匹配到之后还会继续匹配,如果后续依然有相同的字符,才会结束匹配,中间的所有字符都会匹配上
        // 关闭贪婪模式: 只需要在量词后面加一个?

        //  +重复一次或更多次,   ?重复零次或一次,   g全局匹配  .表示任意字符
        // console.log(jsStr)
        const jsStr = myjs.replace(/[\r\n]/g, '').replace(/console.log\('.+?'\);/g, '')

        //有script标签再放js代码
        const result = `<script>${jsStr}</script>`

        //fs.writeFile(文件路径,写入的内容,回调函数)把html代码和js代码凭借到一起
        fs.writeFile(path.join(__dirname, 'dist/newindex.html'), newStr + result, (err) => {
            if (err) console.log(err)
            else console.log(`恭喜,压缩成功`)

        })
    })

})

四、URL 中的端口号

URL: 统一资源定位符,简称 网址 ,用于访问网络上的资源
端口号:标记服务器里对应服务程序(0-65535 的整数)
Web 服务 :一个程序,用于提供网上信息浏览功能
注意:0-1023 和一些特定端口号被占用,我们自己编写服务程序请避开使用

注意:http 协议,默认访问 80 端口

五、 http 模块

1.创建服务器程序

步骤:
1. 引入 http 模块 ,创建 Web 服务对象
const http = require('http')
const server = http.createServer( )
2. 监听 request 请求事件,对本次请求,做一些响应处理
server.on('request事件’,回调函数)
    req=request   参数1:req请求对象,这一次用户请求的信息
    res=response  参数2:  res响应对象,这一次要响应给用户的信息
3. 启动 Web 服务监听对应端口号
4. 运行本服务在终端,用浏览器发起请求

server.listen(端口号,回调函数)

/**
 * 目标:使用 http 模块,创建 Web 服务
 * Web服务:一个程序,用于提供网上信息浏览服务
 * 步骤:
 *  1. 引入 http 模块,创建 Web 服务对象
 *  2. 监听 request 事件,对本次请求,做一些响应处理
 *  3. 启动 Web 服务监听对应端口号
 *  4. 运行本服务在终端,用浏览器访问 http://localhost:3000/ 发起请求(localhost 是本机域名)
 * 注意:终端里启动了服务,如果想要终止按 ctrl c 停止即可
 */
// 1. 引入 http 模块, 创建 Web 服务对象
const http = require('http')
    //创建web服务
const server = http.createServer()


// 2.监听 request 事件, 对本次请求, 做一些响应处理
//发送请求拿到结果  server.on('request事件’,回调函数)
// http请求是指一次请求一次响应
// req=request  参数1:req请求对象,这一次用户请求的信息
// res=response  参数2:res响应对象,这一次要响应给用户的信息
server.on('request', (req, res) => {
    // res.end(返回的响应结果)
    // //设置响应头的内容类型---text/html表示的是html的文本类型;charset=utf-8设置字符编码-万国码
    res.setHeader('content-type', 'text/html;charset=utf-8')
    res.end('欢迎使用本服务器')
        // res.end('hello web')
})

// 3.监听
// server.listen(端口号,回调函数)
server.listen(3001, () => {
    console.log(`web服务已经启动成功`)

})

二、支持中文字符

给响应头添加内容类型


/**
 * 目标:Web 服务支持中文字符
 * 问题:返回响应内容为,中文字符,浏览器无法正确显示
 * 原因:Web 服务没有设置响应头,指定说明内容类型和编码格式
 * 解决:设置响应头内容类型,让请求方能正确解析
 * 语法:res.setHeader('Content-Type', 'text/html;charset=utf-8')
 */

const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {

//设置响应头,内容类型,普通html文本;编码格式为utf-8
res.setHeader('Content-Type','text/html;charset=utf-8')

res.end('你好,亲爱的世界')
3)
server.listen(3000,O =>{
console.1og('web服务已启动')
3)

案例

1.获取省份列表-接口开发

/**
 * 目标:基于 Web 服务,开发-省份列表数据接口
 * 步骤:
 *  1. 创建 Web 服务
 *  2. 使用 req.url 获取请求的资源路径,读取 json 文件数据返回
 *  3. 其他请求的路径,暂时返回不存在的提示
 *  4. 运行 Web 服务,用浏览器请求地址查看效果
 */
// 1加载模块
const http = require('http')
const fs = require('fs')
const path = require('path')
    //2创建web服务
const server = http.createServer()


//3发送请求,监听请求,返回响应结果
server.on('request', (req, res) => {
    if (req.url === '/apc/province') {
        // console.log(`请求地址正确。是省份`)

        // 读取json文件里面的内容,响应给用户→中文→支持中文→设置响应头内容类型
        fs.readFile(path.join(__dirname, 'data/province.json'), (err, data) => { //读取数据
            res.setHeader('content-type', 'application/json;charset=utf-8') //支持中文
            res.end(data.toString())
        })

    } else {
        // console.log(`地址错误,查无此地址`)
        res.setHeader('content-type', 'text/html;charset=utf-8') //支持中文
        res.end('不好意思,访问的资源不存在')
    }
})

//4监听某个端口号
server.listen(3011, () => {
    console.log(`服务器启动成功了`)
})

2.获取城市列表-接口开发

querystring 模块的方法,格式化查询字符串

/**
 * 目标:基于 Web 服务,开发-城市列表数据接口
 * 步骤:
 *  1. 判断 req.url 资源路径+查询字符串,路径前缀匹配/api/city
 *  2. 借助 querystring 模块的方法,格式化查询参数字符串
 *  3. 读取 city.json 城市数据,匹配省份名字下属城市列表
 *  4. 返回城市列表,启动 Web 服务测试
 */
const fs = require('fs')
const path = require('path')
const http = require('http')
const qs = require('querystring')

const server = http.createServer()
server.on('request', (req, res) => {

    //判断条件-url是否以/api/city开头→是以这个开头的,拿到pname的值,去查找数据
    if (req.url.startsWith('/apc/city')) {
        //以/api/city开头的情况
        // console.log(`地址正确`)

        //把省份名字拿出来→读取city.json的内容→从读取的内容中按省份名字查找数据·
        //console.log(req.url.split(‘?')[1])//split字符串分割成数组
        const str = req.url.split('?')
        console.log(str)

        console.log(qs.parse(str)) //{pname:省份名字}--queryString的格式化
        const pname = qs.parse(str).pname //格式化查询参数字符串
            // console.log(pname)

        fs.readFile(path.join(__dirname, 'data/city.json'), (err, data) => {

            const result = JSON.parse(data.toString())[pname]
            res.setHeader('constent-type', 'application;charset=utf-8')
            res.end(JSON.stringify(result))
        })

    } else {
        //路径不正确的情况
        // console.log(`地址错误`)
        res.end('资源不存在')
        res.setHeader('constent-type', 'application;charset=utf-8')
    }
})


//监听某个端口号
server.listen(3011, () => {
    console.log(`服务器启动成功了`)

})

3.浏览时钟

/**
 * 目标:编写 web 服务,监听请求的是 /index.html 路径的时候,返回 dist/index.html 时钟案例页面内容
 * 步骤:
 *  1. 基于 http 模块,创建 Web 服务
 *  2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
 *  3. 其他路径,暂时返回不存在提示
 *  4. 运行 Web 服务,用浏览器发起请求
 */
const fs = require('fs')
const path = require('path')
const http = require('http')


const server = http.createServer()
    //监听请求和响应
server.on('request', (req, res) => {
    if (req.url === '/index.html') {
        console.log('html数据')

        fs.readFile(path.join(__dirname, 'dist/index.html'), (err, data) => {
            res.setHeader('content-type', 'text/html;charset=utf-8')
            res.end(data.toString())
        })
    } else {
        res.setHeader('content-type', 'text/html;charset=utf-8')
        res.end('访问的资源不存在')
    }
})

//监听某个端口号
server.listen(3011, () => {
    console.log(`服务器启动成功了`)

})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第44天

仓库: https://gitee.com/mrxiao_com/2d_game 向量数学的重要性 矢量数学非常重要&#xff0c;因为 它在某种程度上类似于将C和C视为高于汇编语言的语言&#xff0c;从而使得我们能够以略高的层次思考问题&#xff0c;同时保留大部分性能好处和直接访问的类型。这种思维方式就…

【算法day13】二叉树:递归与回溯

题目引用 找树左下角的值路径总和从中序与后序遍历构造二叉树 今天就简简单单三道题吧~ 1. 找到树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 我们…

MindSearch深度解析实践

1. 课程内容 1.1 MindSearch 简介 MindSearch 是一个开源的 AI 搜索引擎框架&#xff0c;具有与 Perplexity.ai Pro 相同的性能。我们可以轻松部署它来构建自己的专属搜索引擎&#xff0c;可以基于闭源的LLM&#xff08;如GPT、Claude系列&#xff09;&#xff0c;也可以使用…

【数据结构进阶】AVL树深度剖析 + 实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、AVL树的概念 二、AVL树底层解析及实现 1. 节点的定义 2. 接口声明 3. AVL树的插入 3.1 更新平衡因子 3.2 旋转&#xff08;重点…

黑马商城微服务复习(6)

MQ高级 1. 消息可靠性2. 发送者的可靠性1. 发送者问题2. 生产者重试机制3. 生产者确认机制4. MQ可靠性5. 消费者的可靠性 3. 延迟消息1. 定义2. 死信交换机 1. 消息可靠性 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发…

深度优先搜索(DFS)与回溯法:从全排列到子集问题的决策树与剪枝优化

文章目录 前言&#x1f384;一、全排列✨核心思路✨实现步骤✨代码✨时间和空间复杂度&#x1f381;1. 时间复杂度&#x1f381;2. 空间复杂度 &#x1f384;二、子集✨解法一&#xff1a;逐位置决策法&#x1f381;步骤分析&#x1f381;运行示例&#x1f381;代码 ✨解法二&a…

STM32--中断

中断 中断向量表 定义一段固定的内存&#xff0c;以4字节对齐&#xff0c;存放各个中断服务函数程序的首地址。定义在启动文件中。 中断相关寄存器 内核中断不经过中断使能、除能寄存器。 中断优先级 1、抢占优先级&#xff1a;高高抢占优先级可以打断正在执行的低抢占优先…

AUTOSAR 汽车开放系统架构

AUTOSAR 官网 AUTOMOTIVE OPEN SYSTEM ARCHITECTURE AUTOSAR (AUTomotive Open System ARchitecture) is a global partnership of leading companies in the automotive and software industry to develop and establish the standardized software framework and open E/E …

《计算机视觉:瓶颈之辩与未来之路》

一、计算机视觉的崛起 计算机视觉是使用计算机模仿人类视觉系统的科学&#xff0c;让计算机拥有类似人类提取、处理、理解和分析图像以及图像序列的能力。它是一个多学科交叉的领域&#xff0c;与机器视觉、图像处理、人工智能、机器学习等领域密切相关。 计算机视觉行业可分为…

Vue 集成地图

电子地图应用广泛&#xff1a; 网约车 : 在网约车 场景中实现 准定位 、导航 、司乘同显 &#xff0c;精准计费 智慧物流、生活服务等&#xff0c;本专题课程囊括各类应用场景 学习 电子地图解决方案&#xff0c;满足学员工作学习各类需求。 基础知识 学习 集成 地图之前需…

Docker Compose实战三:轻松部署PHP

通过前面的文章&#xff08;Docker Compose基础语法与MySQL部署&#xff09;&#xff0c;你已经掌握了Docker Compose的基本语法和常用指令&#xff0c;并成功部署了一个MySQL数据库服务器。今天&#xff0c;我们将继续深入探索Docker Compose的强大功能&#xff0c;介绍如何使…

【深度学习】深刻理解“变形金刚”——Transformer

Transformer 是一种用于处理序列数据的深度学习模型架构&#xff0c;最初由 Vaswani 等人在 2017 年的论文《Attention is All You Need》中提出。它彻底改变了自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;成为许多高级任务&#xff08;如机器翻译、文本生成、问答…

基于springboot+大数据的校园数字图书馆系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

Redis篇-9--数据结构篇1--五种基本结构(String,List,Set,Sorted Set,Hash,BLPOP阻塞逻辑)

Redis 是一个高性能的键值存储系统&#xff0c;支持多种数据结构。每种数据结构都有其独特的特点和适用场景。 1、String&#xff08;字符串&#xff09; &#xff08;1&#xff09;、特点 最简单的数据类型&#xff1a;字符串是最基本的数据类型&#xff0c;可以存储字符串…

优雅的@ObservedV2和@Trace装饰器

Hello&#xff0c;大家好&#xff0c;我是 V 哥。在HarmonyOS NEXT开发中&#xff0c;ObservedV2装饰器和Trace装饰器是用于状态管理的两个装饰器&#xff0c;它们在HarmonyOS应用开发中用于增强对类对象中属性的观测能力。如果你学过观察者模式的原理&#xff0c;你会更容易理…

物联网安全-ARMv8-M Trustzone 实操

前言 本文针对ARMv8m架构M23/M33 MCU安全特性使用进行介绍,以nxp LPC55xx系列和STM32L5xx系列为例,为大家阐述如何使用Trustzone技术提高物联网设备安全性,适合有一定平台安全基础的物联网设备开发人员、安全方案开发人员。 背景 为了提升平台安全性,ARM推出了ARMv8m架构…

昱感微“多维像素”多模态融合感知展示

昱感微采用“多维像素”多模态融合技术&#xff0c;将可见光摄像头、红外摄像头、4D毫米波雷达/激光雷达的探测数据以“多维像素”的数据格式输出&#xff1a;图像数据雷达探测数据红外传感器探测数据叠加&#xff0c;以摄像头像素为颗粒度组合全部感知数据&#xff0c;形成多模…

Launcher添加hotseat图标布局

Launcher的hotseat客户要求添加一些指定应用图标。 首先打开机器将要布局的图标手动移动到hotseat位置上面。 然后使用adb命令将data/data/com.android.launcher3/databases这个文件pull出来。这个文件夹是Luancher的数据库文件。里面保存了相关应用的图标信息。 使用SQLiteS…

GNSS误差源及差分定位

GNSS误差源&#xff1a; &#xff08;一&#xff09;卫星星历误差 由星历信息所得出的卫星位置坐标与实际位置坐标的偏差就是星历误差。星历信息是由 GPS 地面部分测量计算后传入空间部分的。由于卫星在运动中要受到各种摄动力的作用, 而地面部分又很难精确测量这些作用力,…

【数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现希尔排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 9 8 7 6 5 4 3 2 1 0 (说明&#xff1a;第一行是元素个数&a…