Node.js 学习

目录

1.Node.js入门

1.1 什么是 Node.js

1.2 fs模块-读写文件

1.3 path模块-路径处理

1.4 案例-压缩前端html

1.5 认识URL中的端口号

1.6 http模块-创建Web服务

1.7 案例-浏览时钟

2.Node.js 模块化

2.1 模块化简介

2.1.1 什么是模块化?

2.1.2 CommonJS 标准导出和导入(默认)

2.2 ECMAScript标准-默认导出和导入

2.3 ECMAScript标准-命名导出和导入

2.4 包的概念

2.5 npm软件包管理器

2.6 npm安装所有依赖

2.7 npm全局软件包-nodemon

2.8 Node.js总结


1.Node.js入门

1.1 什么是 Node.js

定义:Node.js 是一个开放源代码的服务器平台,用于在服务器中执行JavaScript代码。它通常运行在服务器上而不是浏览器中。

作用:使用 Node.js 编写服务器端程序
  • ✓ 编写数据接口,提供网页资源浏览功能等等
  • 前端工程化:为后续学习 Vue 和 React 等框架做铺垫

Node.js 为何能执行 JS?

原理:Node.js 是建立在 Google 的 V8 JavaScript 引擎之上,这意味着它可以运行JavaScript代码而无需在浏览器中。这意味着开发者可以使用Javascript来编写服务器端代码,从而在客户端和服务器端都使用同一种语言和同一种编程范式,简化了开发和测试工作。

浏览器和Node.js的区别:都支持 ECMAScript 标准语法,Node.js 有独立的 API

 

可以看到Node.js,没有浏览器的BOM和DOM

如何使用 Node.js?
需求:新建 JS 文件,并编写代码后,在 node 环境下执行
命令:在 VSCode 集成终端中,输入 node xxx.js,回车即可执行

1.2 fs模块-读写文件

模块:类似插件,封装了 方法/属性
fs 模块:封装了与本机文件系统进行交互的,方法/属性
语法:
  • 1. 加载 fs 模块对象
  • 2. 写入文件内容
  • 3. 读取文件内容

实现:

注意事项:在读取文件时,成功返回的data,这里的data是buffer 16 进制数据流对象,

但是可以通过toString()方法变成字符串。

1.3 path模块-路径处理

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

解决方案:

建议:在 Node.js 代码中,使用 绝对路径。
补充:__dirname 内置变量(获取当前模块目录-绝对路径)
windows: D:\备课代码\3-B站课程\03_Node.js与Webpack\03-code\03
mac: /Users/xxx/Desktop/备课代码/3-B站课程/03_Node.js与Webpack/03-code/03
注意: path.join() 会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连接在一起
语法:
  • 1. 加载 path 模块
  • 2. 使用 path.join 方法,拼接路径

代码:

1.4 案例-压缩前端html

原始:

需求:把 回车符(\r)和换行符(\n)去掉后,写入到新 html 文件中
步骤:
  • 1. 读取源 html 文件内容
  • 2. 正则替换字符串
  • 3. 写入到新的 html 文件中
代码:
// 案例 - 压缩前端 html
// 需求:把 回车符(\r)和换行符(\n)去掉后,写入到新 html 文件中
// 步骤:
// 1. 读取源 html 文件内容  public/index.html
// 2. 正则替换字符串   String.replace(pattern, replacement)  pattern 可以是正则
// 3. 写入到新的 html 文件中   dist/index.htmlconst fs = require('fs')
const path = require('path')fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {if (err) console.log(err)else {// 使用正则表达式替换const disString = data.toString().replace(/[\r\n]/g, '')console.log(disString)// 将处理过的文件写到其他位置fs.writeFile(path.join(__dirname, 'dist/index.html'), disString, err => {if (err) console.log(err)else console.log('写入成功')})}
})

实现后效果:

1.5 认识URL中的端口号

URL: 统一资源定位符,简称网址用于访问服务器里的资源
端口号:标记服务器里不同功能的 服务程序
端口号范围:0-65535 之间的任意整数

平常我们没加端口号也能访问到数据,是因为 http 协议,默认访问 80 端口。

Web 服务程序 :用于提供网上信息浏览功能
注意:0-1023 和一些特定端口号被占用,我们自己编写服务程序请避开使用

1.6 http模块-创建Web服务

需求:创建 Web 服务并响应内容给浏览器
步骤:
  • 1. 加载 http 模块,创建 Web 服务对象
  • 2. 监听 request 请求事件,设置响应头和响应体
  • 3. 配置端口号启动 Web 服务
  • 4. 浏览器请求 http://localhost:3000 测试
  • (localhost:固定代表本机的域名)

代码:

// 需求:创建 Web 服务并响应内容给浏览器
// 步骤:
// 1. 加载 http 模块,创建 Web 服务对象
// 2. 监听 request 请求事件,设置响应头和响应体
// 3. 配置端口号并启动 Web 服务
// 4. 浏览器请求 http://localhost:3000 测试
// (localhost:固定代表本机的域名)// 加载 http 模块,创建 Web 服务对象
const http = require('http')
const server = http.createServer()
// 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {// 设置text/plain;charset=utf-8 , 请求体才可以显示中文res.setHeader('Content-Type', 'text/plain;charset=utf-8')// 请求体res.end('欢迎使用node.js 和 http模块创建的 Web 服务')
})// 配置端口号并启动 Web 服务
server.listen(3000, () => {console.log('Web 启动成功')})

1.7 案例-浏览时钟

需求:基于 Web 服务,开发提供 网页资源 的功能。
浏览时钟

步骤:
  • 1. 基于 http 模块,创建 Web 服务
  • 2. 使用 req.url 获取请求资源路径,判断并读取 index.html 里字符串内容返回给请求方
  • 3. 其他路径,暂时返回不存在的提示
  • 4. 运行 Web 服务,用浏览器发起请求测试 http://localhost:8080/index.html

代码:

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

2.Node.js 模块化

2.1 模块化简介

2.1.1 什么是模块化?

定义:在Node.js中,每个文件都被视为一个单独的模块。

概念:项目是由很多个模块文件组成的
好处:提高代码复用性,按需加载, 独立作用域

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

2.1.2 CommonJS 标准导出和导入(默认)

使用:
  • 1. 导出:module.exports = {}
  • 2. 导入:require('模块名或路径')
模块名或路径:
  • 内置模块:直接写名字(例如:fs,path,http)
  • 自定义模块:写模块文件路径(例如:./utils.js)

演示:

2.2 ECMAScript标准-默认导出和导入

默认标准使用:
  • 1. 导出:export default {} ,也可以是一个函数
  • 2. 导入:import 变量名 from '模块名或路径'
     

这里的变量名就是export default 里面的对象。 

注意事项: Node.js 默认支持 CommonJS 标准语法
如需使用 ECMAScript 标准语法,在运行模块所在文件夹新建 package.json 文件,
并设置 { "type" : "module" }

2.3 ECMAScript标准-命名导出和导入

命名标准使用:
  • 1. 导出:export 修饰定义语句
  • 2. 导入:import { 同名变量 } from '模块名或路径‘
如何选择:
  • 按需加载,使用命名导出和导入
  • 全部加载,使用默认导出和导入

2.4 包的概念

包:将 模块,代码,其他资料 聚合成一个文件夹。
包分类:
  • 项目包:主要用于编写项目和业务逻辑
  • 软件包:封装工具和方法进行使用

要求:根目录中,必须有 package.json 文件(记录包的清单信息)
package.json 文件的作用?
        ➢ 记录 软件包的名字 ,作者, 入口 文件等信息
注意:导入软件包时,引入的默认是 index.js 模块文件 / main 属性指定的模块文件
需求:封装数组求和函数的模块,判断用户名和密码长度函数的模块,形成成一个 软件包。
分析执行过程:
lib文件夹下的 js 都是封装了属性和方法,方便开发者调用,但是该软件包引入时只会去访问该包的 ( 默认是 index.js 模块文件 / main 属性指定的模块文件 ),该文件为唯一入口,因此需要把所有封装的再封装一遍,提供调用者使用。

演示:

2.5 npm软件包管理器

定义 npm(“Node Package Manager” 的缩写)是Node.js 标准的软件包管理器,用来下载和管
理Node.js包依赖。

使用:
  • 1. 初始化清单文件 :npm init -y(得到 package.json 文件,有则略过此命令)
    • package.json 是 Node.js 项目的核心文件,它包含了项目的元数据、依赖项、脚本等重要信息。
  • 2. 下载软件包 :npm i 软件包名称
  • 3. 使用软件包

npm - 安装所有依赖

原理:

引入软件包: const dayjs = require("dayjs");

 

2.6 npm安装所有依赖

问题:项目中不包含 node_modules,能否正常运行?
答案:不能,缺少依赖的本地软件包(里面包含引入软件包的源码)
问题:为什么一般拷贝别人的项目是很多都没有  node_modules 文件?
原因:因为,自己用 npm 下载依赖比磁盘传递拷贝要快得多
解决:项目终端输入命令: npm i   ,因为   package.json 存在软件包以及版本,因此可以恢复
node_modules 文件。

2.7 npm全局软件包-nodemon

软件包区别:
  • 本地软件包:当前项目内使用,封装属性和方法,存在于 node_modules
  • 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置
nodemon 作用:替代 node 命令,检测代码更改,自动重启程序

使用:
  • 1. 安装:npm i nodemon -g(-g 代表安装到全局环境中)
  • 2. 运行:nodemon 待执行的目标 js 文件

2.8 Node.js总结

Node.js 包:
概念:把模块文件,代码文件,其他资料聚合成一个文件夹
项目包:编写项目需求和 业务逻辑 的文件夹
软件包: 封装工具和方法 进行使用的文件夹(一般使用 npm 管理)
  • 本地软件包:作用在当前项目,一般封装的属性/方法,供项目调用编写业务需求
  • 全局软件包:作用在所有项目,一般封装的命令/工具,支撑项目运行

常用命令:

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

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

相关文章

BP神经网络

一、BP神经网络概述 BP神经网络由Rumelhard和McClelland于1986年提出的一种按照误差逆向传播算法训练的多层前馈神经网络。 从结构上讲,BP神经网络是一种典型的多层前向型神经网络,具有一个输入层input、数个隐含层hidden(可以是一层&#xf…

【高级数据结构】树状数组

一、树状数组的介绍 1.思维导引 树状数组 ( B i n a r y I n d e x e d T r e e , B I T ) (Binary Indexed Tree,BIT) (BinaryIndexedTree,BIT)是利用数的二进制特征进行检索的一种树状的结构。 如何利用二分的思想高效地求前缀和? 如图 4.7 4.7 4.7所示, 以 A A A [ a …

C++初阶学习——探索STL奥秘——模拟实现list类

1、基本框架 list 由三个类构建而成: 节点类:每个节点必须的三部分(指向前一个节点的指针、指向后一个节点的指针、当前节点存储的数据) 迭代器类:此时的迭代器为双向迭代器,比较特殊,需要对其进行封装,如 it并非使迭代器单纯向后移动&…

BLE 设备丢包理解

前言 个人邮箱:zhangyixu02gmail.com在学习 BLE 过程中,总能听到 “丢包” 一词,但是我查阅资料又发现,有大佬说,ATT所有命令都是“必达”的,不存在所谓的“丢包”。而且我发现,在宣传 BLE 产品…

【如何在 Windows 10 主机上通过 VMware 安装 Windows 11 虚拟机,并共享主机网络】

环境说明 主机操作系统:Windows 10虚拟机操作系统:Windows 11虚拟机软件:VMware 步骤一:确保主机(Windows 10)网络连接正常 启动网络加速软件:在主机上启动软件,确保主机可以正常访…

分布式锁优化之 防死锁 及 过期时间的原子性保证(优化之设置锁的过期时间)

文章目录 1、AlbumInfoApiController --》testLock()2、AlbumInfoServiceImpl --》testLock()3、问题:可能会释放其他服务器的锁。 在Redis中设置一个名为lock的键,值为111,并且只有在该键不存在时才设置(即获取锁)。同…

Mistral AI 又又又开源了闭源企业级模型——Mistral-Small-Instruct-2409

就在不久前,Mistral 公司在开源了 Pixtral 12B 视觉多模态大模型之后,又开源了自家的企业级小型模型 Mistral-Small-Instruct-2409 (22B),这是 Mistral AI 最新的企业级小型模型,是 Mistral Small v24.02 的…

【路径规划】自动泊车的 Simulink 模型

摘要 本文介绍了一个用于自主机器人路径规划和导航的 Simulink 模型,该模型结合了路径跟踪算法(如 Pure Pursuit)和动态机器人模型,实现了复杂环境中的路径跟随和导航控制。实验结果表明,模型能够在给定路径上精确控制…

QT快速安装使用指南

在Ubuntu 16.04上安装Qt可以通过多种方式进行。以下是使用Qt在线安装程序和apt包管理器的两种常见方法: 方法一:使用Qt在线安装程序 下载Qt在线安装程序 访问Qt官方网站:Try Qt | Develop Applications and Embedded Systems | Qt找到并下载…

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ:Zynq-7000 All Programmable SoC(APSoC),赛灵思公司(AMD Xilinx)推出的新一代全可编程片上系统 PS:Processing System,处理系统 PL:Program Logic&…

Linux:路径末尾加/和不加/的区别

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 普通文件操作 首先说明这个问题只会出现在目录和符号链接中,因为如果想要索引普通文件但却在路径末尾加/则会出现错误,如例1所示。 # 例1 zhang…

Zotero(7.0.5)+123云盘同步空间+Z-library=无限存储文献pdf/epub电子书等资料

选择123云盘作为存储介质的原因 原因1: zotero个人免费空间大小:300M,如果zotero云端也保存文献pdf资料则远远不够 原因2: 百度网盘同步文件空间大小:1G123云盘同步文件空间大小:10G 第一台电脑实施步骤…

Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题

文章目录 一、HDFS1、Hadoop的三大组成部分2、本地模式和伪分布模式的区别是什么3、什么是HDFS4、如何单独启动namenode5、hdfs的写入流程6、hdfs的读取流程7、hdfs为什么不能存储小文件8、secondaryNameNode的运行原理9、hadoop集群启动后离开安全模式的条件10、hdfs集群的开机…

如何导入一个Vue并成功运行

注意1:要确保自己已经成功创建了一个Vue项目,创建项目教程在如何创建Vue项目 注意2:以下操作均在VS Code,教程在VS Code安装教程 一、Vue项目导入VS Code 1.点击文件,然后点击将文件添加到工作区 2. 选择自己的vue项…

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳 时代背景女生有点作怎么办?大商家族的爱情观 时代背景 一块钱的东西,赋予俩块钱的意义,三块钱卖出去。 用商…

企业急于采用人工智能,忽视了安全强化

对主要云提供商基础设施上托管的资产的安全分析显示,许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…

Python爬虫使用实例-umei

优美图库 www.umei.cc BV1Ag41137re 1/获取资源 查看网站资源结构 多页,每个item只有一张图 多页,每个item都是一个图集 最大页码 内外层图集均有若干page。 通过尾页按钮确定pageNum: 2/发送请求 response requests.get(urlurl, header…

蓝桥杯【物联网】零基础到国奖之路:十. OLED

蓝桥杯【物联网】零基础到国奖之路:十.OLED 第一节 硬件解读第二节 MDK配置 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fa7660b81be9407aa19c603561553db0.png)第三节 代码 第一节 硬件解读 OLED硬件知识: 第二节 MDK配置 第三节 代码 include头文件。 编…

Vue3 中组件传递 + css 变量的组合

文章目录 需求效果如下图所示代码逻辑代码参考 需求 开发一个箭头组件&#xff0c;根据父组件传递的 props 来修改 css 的颜色 效果如下图所示 代码逻辑 代码 父组件&#xff1a; <Arrow color"red" />子组件&#xff1a; <template><div class&…

VM-Ubantu中使用vscode头文件报错——解决办法

问题 系统中头文件明明存在但是却报错 解决方法 在报错的文件中点击&#xff0c;shift ctrl p选择Edit Configurations(JSON) 修改文件内容 原文件内容 修改之后的内容 {"configurations": [{"name": "Linux","includePath":…