Node.js day-01

01.Node.js 讲解

什么是 Node.js,有什么用,为何能独立执行 JS 代码,演示安装和执行 JS 文件内代码

  1. Node.js 是一个独立的 JavaScript 运行环境,能独立执行 JS 代码,因为这个特点,它可以用来编写服务器后端的应用程序

  2. Node.js 作用除了编写后端应用程序,也可以对前端代码进行压缩,转译,整合等等,提高前端开发和运行效率

  3. Node.js 基于Chrome V8 引擎封装,独立执行 JS 代码,但是语法和浏览器环境的 V8 有所不同,没有 document 和 window 但是都支持 ECMAScript 标准的代码语法

  4. 想要得到 Node.js 需要把这个软件安装到电脑,在素材里有安装程序(window 和 mac 环境的)参考 PPT 默认下一步安装即可

  5. Node.js 没有图形化界面,需要使用 cmd 终端命令行(利用一些命令来操控电脑执行某些程序软件)输入,node -v 检查是否安装成功

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

02.fs模块 读写文件

  1. 模块:类似插件,封装了方法和属性供我们使用

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

/*** 目标:使用 fs 模块,读写文件内容* 语法:* 1. 引入 fs 模块* 2. 调用 writeFile 写入内容* 3. 调用 readFile  读取内容*/
const fs = require('fs') // 引入 fs 模块fs.readFile('./text.txt',(err,data)=>{   // 调用 readFile  读取内容  data 是文件内容的 Buffer 数据流if (err) {console.log(err)        } else {// 读取出来的数据默认是Buffer数据流,得toString()转成字符串,用户能看懂console.log(data.toString())        }
})
// fs.writeFile('写入的文件','写入的内容',回调函数(err))
// 写入的数据,新的替换旧的 会覆盖原文件的所有内容;没有这个文件则自动创建这个文件
fs.writeFile('./text11.txt','我是鸿蒙6期的~~~',err=>{ // 写入内容console.log('恭喜写入成功')    
})

03.path 模块(绝对路径)

  • Node.js 执行 JS 代码时,代码中的路径都是以终端所在文件夹出发查找相对路径,而不是以我们认为的从代码本身出发,会遇到问题,所以在 Node.js 要执行的代码中,访问其他文件,建议使用绝对路径
  • path模块内置变量 __dirname配合 path.join() 来得到绝对路径使用
/*** 目标:读取 test.txt 文件内容* 注意:代码中,使用绝对路径* 原因:Node.js 执行时会以终端所在文件夹作为相对路径,去拼接代码中路径使用(导致找不到目标文件)* 解决:使用 path.join() 和 __dirname 来填写要查找的目标文件绝对地址*/const fs = require('fs')
const path = require('path')  // 引入path模块
fs.readFile(path.join(__dirname,'..','text.txt'),(err,data)=>{  // 读取if (err) {console.log(err)        } else {console.log(data.toString())        }
})

04.案例 压缩前端的html

/*** 目标一:压缩 html 里代码* 需求:把 public/index.html 里的,回车/换行符去掉,写入到 dist/index.html 中*  1.1 读取 public/index.html 内容*  1.2 使用正则替换内容字符串里的,回车符\r 换行符\n*  1.3 确认后,写入到 dist/index.html 内*/
// 读取public里面的index.html→格式化压缩→压缩完的代码写入到dist里面的newIndex.html
// 读取文件fs模块+路径path
const fs = require('fs')
const path = require('path')
// 读取原html文件
// fs.readFile(文件,回调函数)
fs.readFile(path.join(__dirname, 'public', 'index.html'), (err, data) => {if (err) console.log(err)//  else console.log(data.toString())        const htmlStr = data.toString() // 代码→去掉回车换行\r\n→用正则找到\r\n替换成空字符const newStr = htmlStr.replace(/[\r\n]/g, '') // g表示替换所有的\r\nconsole.log(newStr)// 写入到新的html文件//  fs.writeFile(文件路径,要写入的内容,回调函数)fs.writeFile(path.join(__dirname, 'dist', 'newIndex.html'), newStr, (err) => {if (err) console.log(err)else console.log('恭喜,压缩成功')})
})

05.案例 压缩前端的js(压缩 js 里代码,并整合到 html 中一起运行)

/*** 目标二:压缩 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')
// 读取html文件
fs.readFile(path.join(__dirname, 'public', 'index.html'), (err, data) => {if (err) console.log(err)// else console.log(data.toString())const htmlStr = data.toString()const newStr = htmlStr.replace(/[\n\r]/g, '') //已经去掉\r\n的html代码// console.log(newStr) // 读取html成功// 读取js代码fs.readFile(path.join(__dirname, 'public/index.js'), (err, data) => {if (err) console.log(err)// else console.log(data.toString())//  有script标签再放js代码const myjs = data.toString()//代码→去掉\r\n;去掉log输出→把html和js拼一起写入到新html文件const jsStr = myjs.replace(/[\r\n]/g, '').replace(/console.log\('.+?'\);/g, '')// console.log(jsStr)      const newjs = `<script>${jsStr}</script>`  //带script标签的js// 把html文件和js一起写到其他文件夹// fs.writeFile(文件路径,写入的内容,回调函数)把html代码和js代码凭借到一起fs.writeFile(path.join(__dirname, './dist/new.html'), newStr + newjs, (err) => {if (err) console.log(err)else console.log('成功')})})
})

06.URL 端口号

/*** 目标:了解端口号的作用* 端口号:用于区分服务器中的不同服务程序* 取值范围:0-65535* 注意:0-1023 和一些特定端口号是被占用的,我们自己编写服务程序请避开使用*  1. URL 是统一资源定位符,简称网址,用于访问网络上的资源2. 端口号的作用:标记服务器里对应的服务程序,值为(0-65535 之间的任意整数)3. 注意:http 协议,默认访问的是 80 端口4. Web服务:一个程序,用于提供网上信息浏览功能5. 注意:0-1023 和一些特定的端口号被占用,我们自己编写服务程序请避开使用 * * */

07.http模块-创建Web服务

/*** 目标:使用 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()
// 发请求,返回响应结果
// server.on('request事件',回调函数)
server.on('request',(req,res)=>{// 设置响应头,内容类型,普通 html 文本:编码格式为 utf-8res.setHeader('Content-Type','text/html;charset=utf-8')res.end('你好,欢迎访问')// res.end('hallo')
})// 启动 Web 服务监听对应端口号
// server.listen(端口号,回调函数)
server.listen(6656,()=>{console.log('web 服务已启动')})

08.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) => {res.end('你好,亲爱的世界') 
})
server.listen(3000, () => {console.log('Web 服务启动了')
})

09.案例 - 省份列表接口

/*** 目标:基于 Web 服务,开发-省份列表数据接口* 步骤:*  1. 创建 Web 服务*  2. 使用 req.url 获取请求的资源路径,读取 json 文件数据返回*  3. 其他请求的路径,暂时返回不存在的提示*  4. 运行 Web 服务,用浏览器请求地址查看效果*/
const fs = require('fs')const http =  require('http')
const path = require('path')//  创建web服务
const server = http.createServer()// 3.发请求,监听请求,返回响应结果
server.on('request',(req,res)=>{
if(req.url ==='/api/provin'){// 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(3333,()=>{console.log('服务器启动成功')})

10.案例 - 城市列表接口

/*** 目标:基于 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 { queryObjects } = require('v8')
const qs = require('querystring')
//  创建web服务
const server = http.createServer()// 03.发请求监听请求,返回响应结果
server.on('request',(req,res)=>{//判断条件-url是否以/api/city开头→是以这个开头的,拿到pname的值,去查找数据if(req.url.startsWith('/api/city')){console.log('地址正确')const str =req.url.split('?')[1]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] // 数组,不能直接返回数组,返回jsonres.setHeader('content-type','application/json;charset=utf-8')res.end(JSON.stringify(result))})}else{res.setHeader('content-type','application/json;charset=utf-8')res.end('资源不存在')}
})// 04.监听某个端口
server.listen(3333,()=>{console.log('服务启动成功')})

11.案例-浏览时钟

/*** 目标:编写 web 服务,监听请求的是 /index.html 路径的时候,返回 dist/index.html 时钟案例页面内容* 步骤:*  1. 基于 http 模块,创建 Web 服务*  2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方*  3. 其他路径,暂时返回不存在提示*  4. 运行 Web 服务,用浏览器发起请求*/
const http = require('http')
const fs = require('fs')
const path = require('path')
// 创建web服务
const server = http.createServer()// 发请求监听请求,返回响应结果
server.on('request',(rep,res)=>{if(rep.url === '/index.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(3333,()=>{console.log('服务启动成功')
})

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

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

相关文章

又要考试了

一、实现无名管道练习&#xff1a;父进程写入管道&#xff0c;子进程读取管道数据。 #include<myhead.h> int main(int argc, const char *argv[]) {int fd[2];char buff[1024]"王吕阳&#xff0c;崔庆权别卷了";char s[1024];if(pipe(fd)-1){perror("pi…

LoadBalancer负载均衡和Nginx负载均衡区别理解

LoadBalancer和Nginx都是用来做负载均衡用的&#xff0c;那二者有什么区别呢&#xff1f; Nginx服务器端的负载均衡&#xff1a; 所有请求都先发到nginx&#xff0c;然后再有nginx转发从而实现负载均衡。LoadBalancer是本地的负载均衡&#xff1a; 它是本地先在调用微服务接口…

Technitium DNS Server的基本使用1(创建主区域,A记录,开启递归查询,递归到114.114.114.114)

Technitium DNS Server Technitium DNS Server搭建 搭建请看博主的上篇博客&#xff0c;内外网的方法都有 链接: 内网搭建Technitium DNS Server详细教程 登陆进去是以下界面 这个界面主要是监控&#xff0c;有访问的时候就会有波动 创建主区域&#xff0c;A记录 写上主区…

Git简介和特点

目录 一、Git简介 二、Git特点 1.集中式和分布式 (1)集中式版本控制系统 (2)分布式版本控制系统 2.版本存储方式的差异 (1)直接记录快照&#xff0c;而非差异比较 3.近乎所有操作都是本地执行 一、Git简介 Git是目前世界上最先进的的分布式控制系统&#xff08;没有之一…

CSS学习记录15

CSS下拉菜单 使用CSS创建可悬停的下拉列表。 下拉式式菜单 .dropdown类使用position:relative,当我们希望将下拉内容放置在下拉按钮的正下方(使用position:absolute)时&#xff0c;需要使用该类。 .dropdown-content 类保存实际的下拉内容。默认情况下它是隐藏的&#xff0…

RabbitMQ全局流量控制

RabbitMQ全局流量控制 流控机制流控是对什么进行控制&#xff1f;rabbitmq进程邮箱流控机制是什么&#xff1f; 流控原理流控原理流程 流控状态显示流控对象流控机制对象主要进程各进程状态情形分析 性能提升提升队列性能方式 当消息积压时&#xff0c;消息会进入到队列深处&am…

大数据平台

大数据行业应用持续升温&#xff0c;特别是企业级大数据市场正在进入快速发展时期。越来越多的企业期望实现数据孤岛的打通&#xff0c;整合海量的数据资源&#xff0c;挖掘并沉淀有价值的数据&#xff0c;进而驱动更智能的商业。随着公司数据爆发式增长&#xff0c;原有的数据…

鸿蒙生态的崛起:开发实践、认证路径与激励策略

目录 前言 鸿蒙生态能力和行业解决方案 1、鸿蒙创新能力 2、鸿蒙行业解决方案 中软鸿蒙生态业务布局 1、深度参与鸿蒙生态建设 2、提供一站式鸿蒙生态服务 &#xff08;1&#xff09;服务目录 &#xff08;2&#xff09;改造过程的关键点 &#xff08;3&#xff09;鸿…

指令遵循数据集IFEval介绍:中英双语

IFEval数据集介绍&#xff1a;评估大语言模型指令遵循能力 1. IFEval数据集提出的问题 随着大语言模型&#xff08;如GPT-4、PaLM 2等&#xff09;在自然语言任务中的广泛应用&#xff0c;模型的指令遵循能力&#xff08;Instruction Following&#xff09;成为一个重要评估指…

基于Qt的上位机通讯库

1.前言 做Qt上位机已经有两年的时间了&#xff0c;上位机主要是和下游器件打交道的&#xff0c;通过modbus、tcp、串口等协议来控制这些设备&#xff0c;通过一定的时序控制&#xff0c;完成所需要的工作流程。这其中最重要的就是通讯了&#xff0c;上位机开发过程中的相当一部…

docker安装mysql5.7

1、宿主机创建映射目录 mkdir -p /data/mysql/log mkdir -p /data/mysql/data mkdir -p /data/mysql/conf这里我放在了/data/mysql目录下 2、拉取mysql镜像 docker pull mysql:5.7注意是5.7版本&#xff0c;如果是8版本操作会略有不同&#xff0c;下篇文章介绍安装8版本的操…

SQLServer利用QQ邮箱做SMTP服务器发邮件

环境 Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) SQL Server Management Studio 15.0.18384.0 SQL Server 管理对象 (SMO) 16.100.46367.54 Microsoft .NET Framework 4.0.30319.42000 操作系统 Windows Server2019 ———————————————— 前言&#xf…

好用的网站-直接复制的文字图标不需要引入

分享一个前端不需要引入的&#xff0c;可以直接复制的图标网站 直接复制放在代码中 特殊符号大全&#xff0c;可直接复制黏贴 (shijianchuo.net)

修改uniapp下拉刷新圆圈颜色

直接看图 修改前就是常规的绿色 自定义更符合我们的软件 直接说方法 修改 在App.vue的style样式里添加一行 .uni-page-refresh--refreshing .uni-page-refresh__path{stroke:#FF2442; }我是通过 不执行 uni.stopPullDownRefresh(); 下拉刷新 之后通过F12看出来的 希望可以帮…

Maven插件打包发布远程Docker镜像

dockerfile-maven-plugin插件的介绍 dockerfile-maven-plugin目前这款插件非常成熟&#xff0c;它集成了Maven和Docker&#xff0c;该插件的官方文档地址如下&#xff1a; 地址&#xff1a;https://github.com/spotify/dockerfile-maven 其他说明&#xff1a; dockerfile是用…

12.11数据结构-图

无向完全图&#xff1a;在无向图中&#xff0c;如果任意两个顶点之间都存在边&#xff0c;则称该图为无向完全图。 有向完全图&#xff1a;在有向图中&#xff0c;如果任意两个顶点之间都存在方向相反的两条弧&#xff0c;则称该图为有向完全图。 含有n个顶点的无向完全图有…

Intel(R) Iris(R) Xe Graphics安装Anaconda、Pytorch(CPU版本)

一、Intel(R) Iris(R) Xe Graphics安装Anaconda 下载网址&#xff1a;https://repo.anaconda.com/archive/ 双击Anaconda3-2024.10-1-Windows-x86_64&#xff0c;一直下一步&#xff0c;选择安装的路径位置&#xff0c;一直下一步就安装完成了。打开Anaconda PowerShell Promp…

git使用教程(超详细)-透彻理解git

一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉&#xff0c;我们要重新认识本文所讲述的所有概念。 1.worktree worktree是一个目录&#xff0c;你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree必须要与一个…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…

java全栈day16--Web后端实战(数据库)

一、数据库介绍 二、Mysql安装&#xff08;自行在网上找&#xff0c;教程简单&#xff09; 安装好了进行Mysql连接 连接语法&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroot -p密码 方法二&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroo…