前端学习笔记 | Node.js

一、Node.js入门

1、什么是Node.js

  • 定义:是跨平台JS运行环境(可以独立执行JS的环境)
  • 作用:
    • 编写数据接口,提供网页资源功能等等
    • 前端工程化:为后续学Vue和React等框架做铺垫

2、Node.js为何能执行JS?

3、如何执行Node.js代码?

在VSCode终端中输入:node xxx.js回车即可执行(注意路径)

二、 fs模块-读写文件

1、定义

类似插件,封装了与本机文件系统进行交互的方法/属性

2、语法

3、案例:读写文件

/*** 目标:基于 fs 模块读写文件内容*  1. 加载 fs 模块对象*  2. 写入文件内容*  3. 读取文件内容*/
// 1. 加载 fs 模块对象
const fs = require('fs')
// 2. 写入文件内容
fs.writeFile('./test.txt', 'hello, Node.js', (err) => {if (err) console.log(err)else console.log('写入成功')
})
// 3. 读取文件内容
fs.readFile('./test.txt', (err, data) => {if (err) console.log(err)// data 是 buffer 16 进制数据流对象// .toString() 转换成字符串else console.log(data.toString())
})

 三、path模块-路径处理

 1、会出现的问题?

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

2、处理方法

(1)使用内置变量_dirname,该变量的值是终端路径

(2)利用path.join()方法传入参数拼接的路径参数

3、案例:路径处理实例

/*** 目标:在 Node.js 环境的代码中,应使用绝对路径* 原因:代码的相对路径是以终端所在文件夹为起点,而不是 Vscode 资源管理器*  容易造成目标文件找不到的错误*/
const fs = require('fs')
// 1. 引入 path 模块对象
const path = require('path')
// 2. 调用 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())
})

四、压缩前端html

1、需求

把回车符和换行符去掉后重新写入到新html文件中

2、步骤

(1)读取源html文件内容

(2)正则替换字符串

(3)写入到新的html文件中

3、案例

/*** 目标1:压缩 html 代码* 需求:把回车符 \r,换行符 \n 去掉,写入到新 html 文件中*  1.1 读取源 html 文件内容*  1.2 正则替换字符串*  1.3 写入到新的 html 文件中*/
// 1.1 读取源 html 文件内容
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {if (err) console.log(err)else {const htmlStr = data.toString()// 1.2 正则替换字符串const resultStr = htmlStr.replace(/[\r\n]/g, '')console.log(resultStr)// 1.3 写入到新的 html 文件中fs.writeFile(path.join(__dirname, 'dist/index.html'), resultStr, err => {if (err) console.log(err)else console.log('写入成功')})}
})

五、http:url端口号、web服务程序

1、URL端口号

定义:标记服务器里不同功能的服务程序

端口号范围:0-65535之间的任意整数

2、常见的服务程序

3、创建Web服务

/*** 目标:基于 http 模块创建 Web 服务程序*  1.1 加载 http 模块,创建 Web 服务对象*  1.2 监听 request 请求事件,设置响应头和响应体*  1.3 配置端口号并启动 Web 服务*  1.4 浏览器请求(http://localhost:3000)测试*/
// 1.1 加载 http 模块,创建 Web 服务对象
const http = require('http')
const server = http.createServer()
// 1.2 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {// 设置响应头-内容类型-普通文本以及中文编码格式res.setHeader('Content-Type', 'text/plain;charset=utf-8')// 设置响应体内容,结束本次请求与响应res.end('欢迎使用 Node.js 和 http 模块创建的 Web 服务')
})
// 1.3 配置端口号并启动 Web 服务
server.listen(3000, () => {console.log('Web 服务启动成功了')
})

4、案例:将一个html网页通过web服务加载

/*** 目标:基于 Web 服务,开发提供网页资源的功能* 步骤:*  1. 基于 http 模块,创建 Web 服务*  2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方*  3. 其他路径,暂时返回不存在提示*  4. 运行 Web 服务,用浏览器发起请求*/
const fs = require('fs')
const path = require('path')
// 1. 基于 http 模块,创建 Web 服务
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {// 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方if (req.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 {// 3. 其他路径,暂时返回不存在提示res.setHeader('Content-Type', 'text/html;charset=utf-8')res.end('你要访问的资源路径不存在')}
})
server.listen(8080, () => {console.log('Web 服务启动成功了')
})

六、 Node.js模块化

1、什么是模块化

概念:项目是由很多个模块文件组成的

好处:提高代码复用性,按需加载,独立作用域

使用:需要标准语法导出和导入进行使用

2、CommonJS标准

需求:定义utils.js模块,封装基地址和数组总和函数

3、案例

utils.js

/*** 目标:基于 CommonJS 标准语法,封装属性和方法并导出*/
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)// 导出
module.exports = {url: baseURL,arraySum: getArraySum
}

index.js

/*** 目标:基于 CommonJS 标准语法,导入工具属性和方法使用*/
// 导入
const obj = require('./utils.js')
console.log(obj)
const result = obj.arraySum([5, 1, 2, 3])
console.log(result)

4、ECMAScript标准-默认导出和导入

需求:封装并导出基地址和求数组元素的函数

 

utils.js

/*** 目标:基于 ECMAScript 标准语法,封装属性和方法并"默认"导出*/
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)// 默认导出
export default {url: baseURL,arraySum: getArraySum
}

package.json

{"type": "module"
}

index.js

/*** 目标:基于 ECMAScript 标准语法,"默认"导入,工具属性和方法使用*/
// 默认导入
import obj from './utils.js'
console.log(obj)
const result = obj.arraySum([10, 20, 30])
console.log(result)

5、ECMAScript标准-命名导出和导入

按需导出时使用

模块 utils.js

/*** 目标:基于 ECMAScript 标准语法,封装属性和方法并"命名"导出*/
export const baseURL = 'http://hmajax.itheima.net'
export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

配置文件 package.json

{"type": "module"
}

唯一接口 index.js

/*** 目标:基于 ECMAScript 标准语法,"命名"导入,工具属性和方法使用*/
// 命名导入
import {baseURL, getArraySum} from './utils.js'
console.log(obj)
console.log(baseURL)
console.log(getArraySum)
const result = getArraySum([10, 21, 33])
console.log(result)

 七、包

1、包的概念

将模块、代码,其他资料聚合成一个文件夹

2、包分类

  • 项目包:编写项目代码的文件夹
  • 软件包:封装工具和方法供开发者使用
    • 要求:根目录中,必须要有package.json文件(记录包的清单信息)
    • 注意导入软件包时,引入的默认时index.js模块文件/main属性指定的模块文件

3、实例

utils是一个软件包

arr.js和str.js均为软件包封装的工具,index.js是utils工具包唯一出口(作用:把所有工具模块方法集中起来,统一向外暴露),server.js导入utils软件包,使用里面封装的工具函数。

arr.js

/*** 目标:封装数组常用的方法*/
// 数组求和函数
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)module.exports = {getArraySum
}

str.js

/*** 目标:封装校验用户名和密码长度的函数* 要求:用户名最少 8 位,密码最少为 6 位*/const checkUserName = username => {return username.length >= 8
}const checkPassWord = password => {return password.length >= 6
}module.exports = {checkUser: checkUserName,checkPwd: checkPassWord
}

index.js

/*** 本文件是,utils 工具包的唯一出口* 作用:把所有工具模块方法集中起来,统一向外暴露*/
const { getArraySum } = require('./lib/arr.js')
const { checkUser, checkPwd } = require('./lib/str.js')// 统一导出所有函数
module.exports = {getArraySum,checkUser,checkPwd
}

server.js

/*** 目标:导入 utils 软件包,使用里面封装的工具函数*/
const obj = require('./utils')
console.log(obj)
const result = obj.getArraySum([10, 20, 30])
console.log(result)

八、npm包管理器

1、npm包

(1)定义

  • npm是Node.js标准的软件包管理器

(2)使用

  • 初始化清单文件:npm init -y(得到package.json文件,有则跳过)
  • 下载软件包:npm i 软件包名称
  • 使用软件包

(3)总结

2、npm-安装所有依赖

(1)问题:项目中不包含node_modules,不能正常运行。原因是缺少以来的本地软件包,因为自己用npm下载比拷贝作者上传包快得多。

(2)解决方法:npm i

下载pakage.json中记录的所有软件包

(3)总结

3、全局软件包nodemon

(1)软件包区别:

本地软件包:当前项目内使用,封装属性和方法,存在于node_modules

全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置

nodemon作用:替代node命令,检测代码更改,自动重启程序

(2)使用

i.安装:npm i nodemon -g(代表安装到全局)

ii.运行:nodemon待执行的目标js文件

e.g nodemon server.js(node server.js 代码修改需要手动启动)

(3)案例:启动准备好的项目,修改代码保存后,观察自动重启应用程序

(4)总结

 九、黑马Node.js总结

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

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

相关文章

python分类信息服务平台移动端的设计与实现flask-django-php-nodejs

分类信息服务平台设计的目的是为用户提供活动信息、活动记录等方面的平台。 与PC端应用程序相比,分类信息服务平台的设计主要面向于移动端,旨在为管理员和用户、商铺提供一个分类信息服务平台。用户可以通过Android及时查看活动信息等。 分类信息服务平台…

IDEA调优-四大基础配置-编码纵享丝滑

文章目录 1.JVM虚拟机选项配置2.多线程编译速度3.构建共享堆内存大小4.关闭不必要的插件 1.JVM虚拟机选项配置 -Xms128m -Xmx8192m -XX:ReservedCodeCacheSize1024m -XX:UseG1GC -XX:SoftRefLRUPolicyMSPerMB50 -XX:CICompilerCount2 -XX:HeapDumpOnOutOfMemoryError -XX:-Omi…

pytest之fixture结合conftest.py文件使用+断言实战

pytest之fixture结合conftest.py文件使用 conftest.py--存放固件固件的优先级pytest执行流程pytest之断言实战pytest结合allure-pytest插件生成美观的报告 conftest.py–存放固件 在一个项目的测试中,大多数情况下会有多个类、模块、或者包要使用相同的测试夹具。这…

kafka2.x版本配置SSL进行加密和身份验证

背景:找了一圈资料,都是东讲讲西讲讲,最后我还没搞好,最终决定参考官网说明。 官网指导手册地址:Apache Kafka 需要预备的知识,keytool和openssl 关于keytool的参考:keytool的使用-CSDN博客 …

Pytest测试框架+allure+jenkins自动化持续集成

Pytest是python的一种单元测试框架,可通过pytest 目录路径来运行测试用例 可以通过断言assert来测试是否通过 1.pytest测试用例命名规范 需严格遵循此规范,不然使用 pytest 目录 来运行会找不到该条测试用例。 可通过这样定义main函数&#xf…

Redis入门到实战-第二弹

Redis入门到实战 Redis安装官网地址Redis概述Redis-server安装Redis-stack-server使用(可选)Redisinsight安装(可选)更新计划 Redis安装 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…

LabVIEW焓差试验室流量计现场自动校准系统

LabVIEW焓差试验室流量计现场自动校准系统 在现代工业和科研领域,流量计的准确性对于保证生产过程的质量和效率非常重要。开发了一种基于LabVIEW的焓差试验室流量计现场自动校准系统,通过提高流量计校准的准确性和效率。 在空调器空气焓值法能效测量装…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节,范围是0到65535.如…

redis功能点

一、redis简介 概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很…

windows端给python重命名,快速将默认的python修改为 python3

问题点 在windows上,我们实际已经安装了python,但默认的是 python, 可能有的程序执行需要用到 python3,下面的方法可以快速将默认的python修改为 python3 解决方法 此方法需要保证windows上已经安装了python 1:首先找到系统的…

LED显示屏视频播放器的8大功能

随着中国LED显示屏企业的规模发展和产品技术的不断创新,LED显示屏在各个领域中的应用得到了广泛推广。然而,LED显示屏的出色表现离不开LED视频播放器这一关键设备的支持。下面将介绍LED视频播放器的8大功能,以及它们如何提升LED显示屏的显像效…

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)

在之前的博客中对AXI4总线进行了介绍(FPGA-AXI4接口协议概述),在这篇博客中,实现用户端与axi4_lite之间的交互逻辑。 一, AXI4 1.1 AXI4 介绍 对AXI4总线简单介绍(具体可见FPGA-AXI4接口协议概述&#…

(done) 机器学习中的方差 variance 和 偏差 bias 怎么理解?

来源:https://blog.csdn.net/weixin_41479678/article/details/116230631 情况1属于:低 bias,高 variance (和 human performance 相近,但和 验证集dev set 相远) 通常意味着模型训练轮数太多 情况2属于:高 bias&#…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

【Web应用技术基础】HTML(5)——案例1:展示简历信息

样式&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>展示简历信息…

真机笔记(1)第一阶段知识讲解

目录 第一阶段讲解&#xff1a; 1.1 机房 1.2 分类&#xff1a; 1.3 机房建设标准 1.3.1 安全性: 1.3.2 供电&#xff1a; 1.3.3 空气调节&#xff1a;&#xff08;恒温恒湿&#xff09; 1.3.4 电磁防护&#xff1a; 2.1 机柜 2.2 分类 2.3 机柜的高度单位 3.1 设备…

【教程】PLSQL查看表属性乱码解决方法

一、前言 PL/SQL是Oracle数据库的编程语言&#xff0c;用于编写存储过程、触发器、函数等。 今天用plsql想查看表的属性&#xff0c;看看各个字段的注释&#xff0c;可是打开一看&#xff0c;居然是乱码的&#xff0c;如下面这样 如果在使用PL/SQL查看表属性时出现乱码&…

隐语笔记3 —— 隐语架构

隐语架构一览 隐语产品层 定位&#xff1a; 通过可视化产品&#xff0c;降低终端用户的体验和演示成本。通过模块化API降低技术集成商的研发成本。 人群画像&#xff1a; 隐私保护计算集成商&#xff0c;产品人员&#xff0c;隐私保护计算需求方&#xff0c;开发人员&#xff…

Flutter-仿携程首页类型切换

效果 唠叨 闲来无事&#xff0c;不小心下载了携程app&#xff0c;还幻想可以去旅游一番&#xff0c;奈何自己运气不好&#xff0c;自从高考时第一次吹空调导致自己拉肚子考试&#xff0c;物理&#xff0c;数学考了一半就交卷&#xff0c;英语2B铅笔除了问题&#xff0c;导致原…

基于modbus TCP实现EPICS与西门子S7 1200系列1215C PLC的通信

PLC介绍 西门子系列PLC在国内的市场占比第一&#xff0c;1200系列中小型PLC&#xff0c;因其众多的产品序列、强大的通讯功能和丰富扩展模块&#xff0c;被使用在工业生产、自动化生产线、智能制造、机器人等各行各业。根据CPU的供电电源的型号和数字量输出的类型&#xff0c;…